使用openCV播放视频时一般是使用while(cap.isOpened())循环播放,视频的处理一般也在循环中。在QT中如果想使用控件实时调整视频处理参数则不能使用while循环,而要使用计时器代替。
例如:
while(cap.isOpened()){
Mat img;
cap>>img;
img=处理函数(img,参数);
cv::imshow(img);
cv::waitKey(33);
}
若想实时调整 处理函数()中的参数,上述代码片修改为
timer = new QTimer(this); //在QT中定义定时器
connect(timer, SIGNAL(timeout()), this, SLOT(play())); //链接信号和槽函数play()
int parameter;
void play(){ //定义播放函数
Mat img;
cap>>img;
img=处理函数(img,parameter);
cv::imshow(img);
}
控件函数(){ //例如滑动条,输入框等
parameter=控件当前值;
timer.start(33); //33是触发间隔33毫秒,根据视频帧数确定
}