标签:
实现视频条的拖动需要使用全局变量g_slider_position,和回调函数onTrackbarSlider()。
拖动条由函数cvCreateTrackbar()函数产生,具体调用为:
1 cvCreateTrackbar("position", 2 "Original", 3 &g_slider_position, 4 frames, 5 onTrackbarSlider); 6 }
“position” 为拖动条名称,“Original”为显示窗口名称,&g_slider_position为拖动条位置,frames为视频的总帧数,onTrackbarSlide()。
实现拖动条随视频的播放而变化,需要添加全局变量 cur_frame,在播放视频的循环体内读取当前的视频帧数
cur_frame = cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES);
由函数cvSetTrackbarPos("position","Original",cur_frames);
实现canny检测的具体代码为
1 #include "highgui.h" 2 #include "cv.h" 3 4 int g_slider_position = 0; 5 CvCapture* g_capture = NULL; 6 int cur_frame = 0; 7 8 void onTrackbarSilder( int pos){ 9 if( cur_frame != pos ){ 10 cvSetCaptureProperty( 11 g_capture, 12 CV_CAP_PROP_POS_FRAMES, 13 pos); 14 } 15 } 16 17 int main(int argc, char** argv) 18 { 19 cvNamedWindow("Original",CV_WINDOW_AUTOSIZE); 20 g_capture = cvCreateFileCapture( argv[1]); 21 22 int frames = (int) cvGetCaptureProperty( 23 g_capture, 24 CV_CAP_PROP_FRAME_COUNT 25 ); 26 27 if (frames != 0 ) 28 { 29 cvCreateTrackbar("position", 30 "Original", 31 &g_slider_position, 32 frames, 33 onTrackbarSilder); 34 } 35 36 IplImage* frame; 37 IplImage* Out; 38 IplImage* O_can; 39 40 while(1){ 41 cur_frame = cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES); 42 cvSetTrackbarPos("position","Original",cur_frame); 43 frame = cvQueryFrame( g_capture); 44 Out = cvCreateImage(cvGetSize(frame), frame->depth,1); 45 O_can = cvCreateImage(cvGetSize(frame), frame->depth,1); 46 47 cvCvtColor(frame,Out,CV_RGB2GRAY); 48 cvCanny(Out,O_can,50,230,3); 49 if(!frame) break; 50 cvShowImage("Original",O_can); 51 char c = cvWaitKey(33); 52 if( c == 27) break; 53 } 54 55 cvReleaseCapture(&g_capture); 56 cvDestroyWindow("Original"); 57 58 return 0; 59 }
这种添加拖动条的方式不会使视频播放卡顿,在播放循环体内使用cur_frame++的方法会使视频播放卡顿。
这种方法可以视频视频canny检测流畅播放
cvCanny( const CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size CV_DEFAULT(3) );
第一个参数是输入图像,第二个参数是输出图像,第三个是低阈值,第四个是高阈值,第五个是canny算子大小,默认为3;
需要注意的是,canny检测的输入和输出图像都是灰度图像。
完整代码如下:
Opencv 读取视频,随播放滚动的视频条,canny检测。
标签:
原文地址:http://www.cnblogs.com/zi-wang/p/5393426.html