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

实现视频条的拖动需要使用全局变量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检测的输入和输出图像都是灰度图像。

完整代码如下:

时间: 2024-08-07 12:11:11

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

手机影音第七天 视频的播放下一个视频功能实现,视频进度、电量变化的实现

先看下效果图: 在这里,视频进度条会根据视频播放变化,下方的按钮中,播放下一个,上一个都已实现. 代码已经托管到码云上,想下载看的小伙伴可以从下方地址中获取 https://git.oschina.net/joy_yuan/MobilePlayer 1.在这张图上,自定义的显示电量的那一列已经被系统自带的状态栏遮盖,下面就说一下实现方法: 系统电量变化时,系统会发送一个广播,所有对这个广播感兴趣的activity都可以注册广播来接收这个广播.在这里接收系统电量变化,屏幕锁屏.开屏的广播,只能使用

opencv 显示一个图片/播放视频

//显示图片 #include"highgui.h" int main(int argc,char **argv) { IplImage *img=NULL; char *imgname="E:/实验/image/1.jpg"; img=cvLoadImage(imgname);//cvLoadImage加载一个图片 并返回一个IplImage指针 cvNamedWindow("test",0);//创建一个叫test的窗口,窗口大小固定 cvS

使用opencv进行多路视频的播放

在监控领域,我们时常需要对多路视频进行实时的播放,这到底是怎么实现的呢?使用opencv的朋友可能会想:我可以先定义一个VideoCapture的数组,然后在一个for循环中,逐一读取各路视频并显示,但是这显然不是同步的,设想一下,如果有32路视频需要同时播放,而一般摄像机的帧率为25fps或30fps,那么按上述方法进行播放,第一路与第三十二路视频的延迟会有1秒多,如果我们需要在其间做一些图像处理,那么延迟将会更大. 有过多线程编程或多核编程经验的朋友会觉得这个问题很好解决,这就是一个简单的并

OpenCV录制视频,播放视频

一.录制视频 获取摄像头操作 camObj = cv2.VideoCapture(0) :0为默认计算机默认摄像头,多个摄像头依次后面1.2.3 检查是否成功初始化: camObj.isOpen() #True成功 False失败,同理打开视频 失败可尝试:camObj.open() 读取一帧图片: ret, frame = camObj.read() 返回值: ret: 代表当前帧是否读取成功 frame: 带表当前帧数据,是一个多维数组,若读取失败则为None 色彩空间的转换:cv2.cvt

Linux OpenCV读取视频失败,cvCreateFileCapture失败的解决

背景: 最近想在嵌入式平台上开发QT+Opencv,无料PC机上编写的OpenCV程序老是打不开视频. 开始提示:OpenCV Error: Bad argument (Array should be CvMat or IplImage) in cvGetSize 但是没有用错.考虑到可能没有打开视频,以作为cvGetSize的参数. 以前程序运行没有问题,最近电脑进行了一些FFMPEG/ZLIB等的交叉编译,就不能运行了. 解决方法: 网上搜索,发现是因为ffmpeg没有编译到opencv里.

在滚动列表中实现视频的播放(ListView & RecyclerView)

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

用OpenCV制作视频控制播放器(无声音)

申明:OpenCV是计算机视觉库,所以用在图片或视频处理上,故播放的视频暂时没有声音 软件:用OpenCV制作视频控制播放器(无声音) 功能说明:新建播放窗口,添加进度条可以拖动视频播放. 流程图: 功能说明: 1. 新建进度条 cvCreatTrackbar("","",&,frames,callback) 2.获取总帧数 cvGetCaptureProperty(&,id) double cvGetCaptureProperty( CvCaptu

OpenCV读取视频和图像序列

在使用OpenCV时候,我们首先会做的是获取待处理的图像,这个图像可能来源于已存储的视频文件.也可能来源于实时的摄像头画面.或是某个文件夹下的一系列图片.或许你会觉得,这都是小菜一碟,因为我们学习OpenCV的第一步一般是学习如何加载和显示一幅图片.对于打开摄像头或是读取视频的程序,网上也是一抓一大把.如果你是初学者,不妨看一下我下面的总结,或许有你不曾注意到的. 对于图像或视频的加载.显示.窗口设置.工具条.图像合并为视频.视频分割成图像.打开视频或摄像头等操作的定义是放在OpenCV的hig

【探索OpenCV】OpenCV读取视频文件

OpenCV读取视频文件之前需要做是事情: 1.下载视频编码解码器 推荐XviD,下载链接:http://pan.baidu.com/s/1jGjE2ii 密码:xrni 2.用格式工厂将视频文件转成标准格式,如*.avi /*----------------------------------------OpenCV视频读取代码---------------------------------------------*/ CString Filepath; CFileDialog dlg(TR