求C++调用opencv设置获取摄像头图像大小的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C++调用opencv设置获取摄像头图像大小的方法相关的知识,希望对你有一定的参考价值。
c++调用opencv获取摄像头图像,但是获取的图像显示的是摄像头的像素大小,这里能不能设置获取的像素的?另外总觉得调用opencv的时候会有一点点的卡现象,不是图像帧率的问题,我用的2.1,会不会是版本问题
opencv里面专门设置分辨率的函数根本不起作用。我也是学习者,后来网上查找了手动更改opencv里面的文件/modules/highgui/src/cap_v4l.cpp 里面的#define DEFAULT_V4L_WIDTH 640再重新编译opencv。调用设置分辨率才行的。我是在linux下的,驱动本来就不好,也一卡卡的。但是如果offline处理的话,可以自己设置帧率。。。我用的是2.4版本的 参考技术A 一 在VC编译器下,在Project菜单下选择setting,弹出对话框。1 设置预编译的头文件
选择C/C++ 【Category】,在下拉菜单中选择Preprocessor,然后在Additional Include directories 中输入以下几项:
C:\Program Files \OpenCV\cv\include (根据本人机器上OpenCV的安装路径进行设置,如在D盘,则写D: ,以下同)
C:\Program Files \OpenCV\otherlibs\highgui
C:\Program Files \OpenCV\cxcore\include(新版本需要)
C:\Program Files \OpenCV\otherlibs\cvcam\include
每一条之间用逗号隔开。其中C:\Program Files\Intel\opencv 为OpenCV的安装路径,这是通用的安装路径,建议最好采用这种设置,以方便大家交流;不然,每次都要重新设置路径,比较麻烦。
2 设置链接库
在 Link按键下的 Category下拉菜单中选择 Input选项(指定要连接的库文件,放弃连接的库文件hao ),在Additional library path中,输入:
C:\Program Files \OpenCV\lib
最后在 Setting For下拉菜单中依次选择 Win32 Debug和 Win32 Release,分别在Object /library modules 输入:
cv.lib highgui .lib cxcore.lib cvcam.lib
注意每个库之间用一个空格隔开。
或者直接在all configurations中的Object /library modules 输入:cv.lib highgui.lib cxcore.lib(新版本需要) cvcam.lib
(cxcore.lib highgui.lib 是几乎所有OpenCV程序都要用到的函数库,分别封装了基本的函数和图形界面接口,cv.lib中封装了大量的图像处理函数,cvcam.lib中封装了很多针对视频流的处理函数)
当前工程就可以使用OpenCV的函数了。
二 如果一直要使用OpenCV的函数,把其路径设置到系统目录下
在Tools 菜单下选择 Options 子菜单,在弹出的对话框中选择Directory,将用到的几个库的路径添加进去。以后只需将所用的库在Object /library modules下输入就可以了,不用再每次指定路径。
在Show directories for 下拉菜单中选择Include files,输入:
C:\Program Files \OpenCV\cv\include
C:\Program Files \OpenCV\otherlibs\highgui
C:\Program Files \OpenCV\cxcore\include(新版本需要)
C:\Program Files \OpenCV\otherlibs\cvcam\include
在Show directories for 下拉菜单中选择Library files,输入:
C:\Program Files \OpenCV\lib
注意:(防止每次都拷贝.dll文件)
我的电脑—属性—高级—环境变量—path—C:\Program Files\OpenCV\bin
OpenCV C++ 相机图像未保存到矩阵
【中文标题】OpenCV C++ 相机图像未保存到矩阵【英文标题】:OpenCV C++ camera image not being saved to matrix 【发布时间】:2015-04-02 20:03:34 【问题描述】:我在 Visual Studios 2012 Express 上使用 openCV 2.4.10 用于 Windows 7、32 位操作系统的桌面。
我创建了一个函数来初始化网络摄像头,获取图像并将其存储在矩阵中,然后返回图像矩阵。
Mat frameCapture ()
Mat srcCap;
//initializes structure type of cap
VideoCapture cap(0);
if(!cap.isOpened())
//check for camera
cout << "No camera detected" << endl;
waitKey(10);
//stores next frame into matrix
cap >> srcCap;
//check to see the camera took a picture
if( srcCap.empty())
cout << "no data in image\n";
//return the image matrix
cap.release();
return srcCap;
int main ()
Mat src;
src = frameCapture();
imshow (window1, src);
waitKey(0);
所以在运行程序时,它会说“图像中没有数据”,这意味着 srcCap.empty() 返回 true,然后它会为 imshow 函数抛出一个断言错误。但是,该程序有时会运行并成功返回图像。此外,当我将函数合并到一个循环中进行图像处理时,它有时会拍几张照片,然后随机吐出“图像中没有数据”并抛出相同的断言错误,或者根本不会拍第一张照片并吐出“图像中没有数据”,抛出相同的断言错误。每次都检测到摄像头,开盖;代码从不说“未检测到摄像头”
我的问题是什么导致 cap >> srcCap 不起作用,是硬件问题吗?我使用的相机是 USB 2.0 可插拔显微镜。
【问题讨论】:
如果您捕获多于一帧会发生什么,例如for (int i=0; i<5; ++i) cap >> srcCap;
?还是空的?
我没有尝试过,我认为问题可能与相机上的 CMOS 传感器对光的敏感性不如 CCD 传感器有关。但是将其嵌套在 for 循环中以拍摄多张照片可能会解决问题。我去看看!
所以它解决了这个问题,我没有通过在函数中创建一个布尔值并使用一个while循环来设置有限数量的尝试,在每次捕获后检查 srcCap.empty() 并且如果它比切换布尔值成功,应该也应该添加一个上限,这样它就不会陷入无限循环。
【参考方案1】:
我认为您当前的程序仅读取第一帧。大多数情况下,在读取相机帧时,第一帧可能不包含任何数据。
我建议您在 main() 中使用循环并阅读后面的帧。
【讨论】:
我也多次注意到这种行为。您对背后发生的事情有任何见解吗? 我认为这可能只是硬件启动或初始化和消息传递等的一部分。我尝试过的 Kinect 和许多网络摄像头在第一帧中给出了相同的空白帧。以上是关于求C++调用opencv设置获取摄像头图像大小的方法的主要内容,如果未能解决你的问题,请参考以下文章
来自带有 Opencv C 程序的网络摄像头的灰色图像,但 C++ 程序完美运行