前段时间做项目需要用opencv读usb摄像头的视频数据,遇到很多无解的问题,虽然后来没有用到,但是还是记录下来,也许以后就知道答案了呢。
1、无论摄像头的实际分辨率是多少,opencv读进来的视频分辨率都是640*480大小的,网上说可以用内置的函数修改分辨率的大小,我试了下下面的函数语句,虽然分辨率确实变成了720p,但是清晰度并没有提升甚至有些模糊,看起来像是强行插值扯大的,没有真正得到清晰度720p的图像。
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);//不起作用
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
另外,看网上有资料说可以修改opencv的默认值,找到了设置640*480的地方在modules/highgui/src/cap_v4l.cpp,但是修改之后编译并没有什么变化,不知道编译的方式是不是不对。
2、无论摄像头的帧率多少,用opencv内置的函数读到的帧率永远是0.
double fps = cap.get(CV_CAP_PROP_FPS);//帧率总是得到0
后来用内置语句对帧率进行设置,没有明显的变化,但是再次输出时,帧率的确是1.也许是显示的原因,设置waitkey=1000ms就可以真正达到一秒一帧。
cap.set(CV_CAP_PROP_FPS, 1);
3、最大的谜团是关于循环读摄像头,最终会内存泄漏这个问题。解决这个问题引申出很多其他问题,比如openc