我最近安装了OpenCV 2.4.7并将其配置为我的Visual Studio 2010 Ultimate ide ...我甚至测试了一个代码来显示图像......
#include "opencv2/highgui/highgui.hpp"
#include "iostream"
using namespace cv;
using namespace std;
int main()
{
Mat im = imread("d:/lena.jpg");
if (im.empty())
{
cout << "Cannot load image!" << endl;
return -1;
}
imshow("Image", im);
waitKey(0);
}
并且它有效但当我尝试使用给定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;
}
myNewOpenCv1.exe中0x75dc812f处的未处理异常:Microsoft C ++异常:cv ::内存位置0x0019f6d8的异常
我不知道它是否与安装有关。我对OpenCV很新,并且不太了解,如果任何习惯这种情况的人都可以为我解决这个错误,并且还会给我一个关于它为什么会发生的解释,并且对此的指导会很好。
希望等待你的答案 - 乔纳森 -
答案 0 :(得分:3)
尝试替换
cap >> frame;
使用:
while (frame.empty()) {
cap >> frame;
}
有时opencv camera API会为前几帧提供垃圾,但过了一段时间后一切都会有效。
您可能希望将该循环限制为固定的迭代次数,以避免无限运行。
答案 1 :(得分:0)
以下代码行仅用于边缘检测。
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
所以,如果您对视频捕获感兴趣,请使用以下代码:
#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;
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("display", frame);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
要运行此代码,您应该在VS中设置库路径,并且您应该在VS中设置链接器选项中的dll。它将起作用!!!