无法在 OpenCV 2.4.7 中从摄像头捕获视频
Can't capture Video from Cam in OpenCV 2.4.7
这是我从这里复制/粘贴的代码:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat edges;
namedWindow("edges",1);
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
imshow("edges", edges);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
但我得到了这个错误:
OpenCV error: Assertion failed (scn==3 || scn==4)
in unknown function, file ........opencvmodulesimgprocsrccolor.cpp, line 3737
我使用的是Windows 7 x64、Visual Studio 2008、OpenCV 2.4.7
问题出在哪里?
编辑:
它有时有效,有时无效。
编辑2:
我编辑了VideoCapture cap(0)到cv::VideoCapture cap(0)然后,我重新构建我的解决方案并运行它。它第一次起作用,我试图运行第二次,但它给了我同样的错误。
编辑3:
我甚至为(;;):编辑了
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("edges", frame);
if(waitKey(30) >= 0) break;
}
这次我收到另一个错误:
OpenCV error: Assertion failed (size.width>0 && size.height>0)
in unknown function, file ........opencvmoduleshighguisrcwindow.cpp, line 261
我想问题出在imshow上。
我遇到了类似的问题。我通过将cap >> frame
之后的所有内容放入if语句来解决它:
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
if (!frame.empty()) {
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
imshow("edges", edges);
}
if(waitKey(30) >= 0) break;
}
我在我的环境中测试了你的代码(Win XP 32位操作系统,VS2008,OpenCV2.4.7)。它每次都能正常工作。你也可以这样做:
IplImage* frame,*edges;
CvCapture* pcapture = cvCreateCameraCapture(0);
cvNamedWindow("edges",CV_WINDOW_AUTOSIZE);
while (1)
{
frame = cvQueryFrame(pcapture);
if (!frame) break;
edges = cvCreateImage(cvGetSize(frame),8,1);
cvCvtColor(frame, edges, CV_BGR2GRAY);
cvSmooth(edges,edges,CV_GAUSSIAN,7,7,1.5,1.5);
cvCanny(edges,edges,0,30,3);
cvShowImage("edges",edges);
cvReleaseImage(&edges);
if (cvWaitKey(30)>=0) break;
}
cvReleaseCapture(&pcapture);
cvDestroyWindow("edges");
你可以试一下它是否在你的环境中也有一些问题。希望能给你一点帮助!
相关文章:
- 如何在c++中录制具有精确帧时间戳的视频
- 如何在QT中的自定义视频小工具t上绘制矩形
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- OpenCV没有显示来自Macbook网络摄像头的视频
- 使用来自视频文件或网络摄像头的 Kinect 面部跟踪
- 如何使用OpenCV在2分钟的间隔内从网络摄像头捕获视频
- 如何在从网络摄像头拍摄视频时加快IMediaControl::Run()
- 无法在 OpenCV 2.4.7 中从摄像头捕获视频
- 手机摄像头是否有可能以不规则的 fps 拍摄视频
- OpenCV:使用 cvWriteFrame 从网络摄像头写入视频时内存泄漏
- 从 Open CV 捕获网络摄像头视频
- 如何在同一个窗口中并排显示2个网络摄像头视频以获得立体声效果
- 如何在ubuntu上使用opencv从外部摄像头捕获视频
- 使用Qt5从USB摄像头录制视频
- opencv视频采集和虚拟机上的摄像头访问
- 在c++中使用directshow从网络摄像头捕获简单的视频
- 视频捕捉无法检测到uEye摄像头
- 网络摄像头视频捕捉使用Visual c++ 6.0
- openCV-网络摄像头的视频捕获-延迟问题