码迷,mamicode.com
首页 > 其他好文 > 详细

Opencv 读取视频,随播放滚动的视频条,canny检测。

时间:2016-04-15 00:13:48      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

实现视频条的拖动需要使用全局变量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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!