【发布时间】:2013-12-16 05:34:37
【问题描述】:
这是我从here复制/粘贴的代码:
#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 ..\..\..\..\opencv\modules\imgproc\src\color.cpp, line 3737
我使用的是 Windows 7 x64、Visual Studio 2008、OpenCV 2.4.7
可能是什么问题?
编辑:
有时有效,有时无效。
编辑 2:
我将 VideoCapture cap(0); 编辑为 cv::VideoCapture cap(0); 然后,我重建我的解决方案并运行它。第一次运行,我第二次尝试运行,它给了我同样的错误。
编辑 3:
我什至编辑了 for(;;):
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 ..\..\..\..\opencv\modules\highgui\src\window.cpp, line 261
我猜问题出在 imshow。
【问题讨论】:
-
你能告诉我这个错误在你的程序中究竟发生在哪里吗?如,它是否发生在
cap >> frame或cvtColor.. 之后?请设置断点并回复我。 -
@scap3y 我把 cout>框架;和 cout
-
@scap3y 还有一个错误 (size.width>0 && size.height>0)
-
问题出在
cvtColor,很明显。我可以建议您更改窗口的名称并尝试..吗?否则,您可能需要逐步调试并查看每一步的值变化。 -
@scap3y 我解决了我的问题,我刚刚添加了 cap.read(frame);在 cap>>frame 之前,它起作用了。你怎么看待这件事?为什么?