opencv调用是视频图像并且显示
来源:互联网 发布:模具编程软件 编辑:程序博客网 时间:2024/06/05 02:53
环境:Ubuntu系统下,USB普通摄像头一枚
代码:有两个版本的,一个是opencv1的,使用cvCreateCameraCapture(ID)保存结果,Iplmage* 保存返回结果。另一版本是opencv2的,使用mat数据类型保存返回结果
/* opencv1 代码 */ /* IplImage* pFrame = NULL; //Mat *pFrame; cvNamedWindow("result", 1); CvCapture* pCapture = cvCreateCameraCapture(-1); cvSetCaptureProperty(pCapture,CV_CAP_PROP_FRAME_WIDTH,1280); cvSetCaptureProperty(pCapture,CV_CAP_PROP_FRAME_HEIGHT,960); while(true) { pFrame = cvQueryFrame(pCapture); if(!pFrame) break; char c = cvWaitKey(33); if(c == 32) break; cvShowImage("result", pFrame); }*/ /*opencv2代码*/ VideoCapture cap(0); if(!cap.isOpened()){ printf("capture cannot opened\n"); return -1; } Mat edges; namedWindow("edges",1); for(int i = 0 ;;i++) { Mat frame; cap>>frame; cvtColor(frame,edges,CV_BGR2GRAY); GaussianBlur(edges,edges,Size(7,7),1.5,1.5); Canny(edges,edges,0,30,3); imshow("edges",edges); char c=waitKey(30); if(c>=0)break; } return 0;
代码及其简单就不说了。
有两个坑,一个是找到摄像头的问题,可以进入/dev/目录中,ls一下,然后查看Video有哪几个,一般默认能找到的是video0 或者 video1,一定要查看一下,比较保险,否则很容易找不到摄像头,然后报错
另外一个坑是,网上可以找到的代码是
if(waitKey(30)>=0)break;
后果就是,只执行了一遍就break了。
其中使用到的一个重要的函数是WaitKey
WaitKey函数原型为:
.
C++: int waitKey(int delay=0)
Python: cv2.waitKey([delay]) → retval
C: int cvWaitKey(int delay=0 )
Python: cv.WaitKey(delay=0) → int
C++为例
如果delay = 0 || delay < 0 , 就无限制等待,直到按键按下之后,返回按键ID.
如果delay > 0 , 就等待(delay) ms,如果按下按键,那么返回按键ID,如果在 ( delay ) ms 内,没有按下按键,就会返回-1.
但是使用
int c = waitKey(30); 在不按任何按键打印出来的数值是255
经过思考可知,这个明显应该返回-1才对,255 明显是 8 bit 下的-1,然而int是32位的,没有溢出,所以直接显示出来是255
函数的返回值竟然是int类型,那么应该如何解决呢?
直接使用8bit的
char c = waitKey(30);
这样结果值为255的时候,就溢出成为-1了
- opencv调用是视频图像并且显示
- OpenCV+MFC显示图像/视频
- OpenCV+MFC显示图像/视频
- opencv + MFC 视频图像显示
- 用opencv读取图像,并且显示
- 用OpenCV读取图像并且显示
- MFC调用Opencv显示视频
- OpenCV学习笔记之图像视频显示
- VS+MFC+Opencv显示视频和图像。
- OpenCv打开摄像头,显示图像,保存视频
- Opencv 读取多幅图像,并且每3秒显示
- OpenCV成长之路4:加载一个视频并且显示
- opencv实现视频的读取并且一帧一帧的显示出来
- Opencv调用摄像头,显示摄像头图像
- VS2008+MFC+opencv 显示视频图像/捕捉摄像头视频界面
- 载入图像并且显示
- OpenCV中如何载入图像并且转换成灰度显示图像直方图
- 利用opencv类库在MFC显示摄像头视频并且保存摄像头视频
- 剑指offer_12(打印出从1到最大n位数)
- C++ 类模板声明时注意的地方
- maven项目使用maven-assembly-plugin打包成可运行的jar
- PAT-A 1044. Shopping in Mars (25)
- Unity 网格合并
- opencv调用是视频图像并且显示
- 防止一个按钮在单位时间内提交多次
- event-config.h指明所在系统的环境
- 继承的实现与限制
- hive空值判断
- [C++学习]剑指offer8题学习笔记
- android 6.0在关机界面添加截图功能
- move_base 配置文件说明
- ORACLE 优化器和Hints