Переместить прямоугольник в синусоиде в OpenCV - PullRequest
0 голосов
/ 26 ноября 2018

Я пишу программу для перемещения моего прямоугольника по заданному пути.Я закончил с прямой и диагональной линией, теперь я хочу обозначить точку в синусоиде, в которой мы можем дать частоту и амплитуду.

Мой код для прямой линии

void MainWindow::on_pushButton_Generate_clicked()
{


int velocity= MainWindowPtr->ui->horizontalSlider_speed->value();
printf("%d\n",velocity);

QTimer *timer = new QTimer;

// make the connection using the timer variable

connect(timer, &QTimer::timeout, this, &generate_video);

// start the timer object by first dereferencing that object first
timer->setInterval(velocity);
timer->start();


}

void generate_video()
{

imageBack= imread(filenameImg);
cvtColor(imageBack, imageBack, cv::COLOR_RGB2GRAY);
rectangle(imageBack,Point(initialX,initialY),Point(initialX+widthImg,initialY+heightImg),Scalar(intensity),-1,8,0);
imshow("image",imageBack);

if(MainWindowPtr->ui->radioButton_TrajLine->isChecked())
{
if(initialX>640)
initialX=0;
else
initialX+=1;
}

}

Теперь для синуса я пытаюсь что-то вроде этого:

 for (xSin=0;xSin<100;xSin++){
            ySin[(int)floor(xSin)]=10 + 10*sin(2*.1*3.14*xSin);
            rectangle(imageBack,Point(xSin,ySin[xSin]),Point(xSin+widthImg,ySin[xSin]+heightImg),Scalar(intensity),-1,8,0);

        }

Но ничего не происходит.Я использую язык C в QT на Ubuntu.

1 Ответ

0 голосов
/ 26 ноября 2018

Ваша функция generate_video генерирует один кадр при каждом вызове.Если вы хотите вставить новый код в него, вы должны использовать + = как прежде, вместо цикла for, чтобы при вызове отображался только один прямоугольник.

ySin = 10 + 10*sin(2*.1*3.14*xSin);
xSin += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...