上次学会了在win7 vs2015搭建OpenCV3.2开发环境,这几天练习了显示图像,播放视频,播放控制和一些简单图像处理(缩放,平滑处理,寻找边缘)今天试了下从摄像机读取数据,发现打开相机失败或者打开后图像是灰色,没采到数据。
cvCreateCameraCapture
我一直参考的是布拉德斯基的《学习OpenCV》。
代码如下,在参考代码下稍作了修改
int main1()
{
cvNamedWindow("test9", CV_WINDOW_AUTOSIZE);
CvCapture* capture;
capture = cvCreateCameraCapture(-1);
assert(capture != NULL);
IplImage* frame;
while (1)
{
frame = cvQueryFrame(capture);
if (!frame)
{
break;
}
cvShowImage("test9",frame);
char c = cvWaitKey(50);
if (c == 27)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("test9");
return 0;
}
仔细核对,没发现什么语法,逻辑错误,也尝试了修改cvCreateCameraCapture的参数,也尝试了网上有些网友的说的加sleep,重编OpenCV库,都无效。后来Google了很多才发现,我现在用的是最新的OpenCV3.2,而书《学习OpenCV》是之前较久版本,而IplImage是较久的C组织结构,是OpenCV1.x的版本,网上仍存在有很多这个版本的例子,而新的OpenCV2.X及以上的API使用的C++,虽然有的案例仍然适用,最好还是以新的demo程序为准吧。
要实现上面的功能是用Mat
Mat
代码而简单,如下
int main()
{
VideoCapture capture(0);
Mat src1;
while (true)
{
capture >> src1;
imshow("TestWebCam", src1);
int key = waitKey(10);
if (key == 27)
{
break;
}
}
}