我确实意识到这个问题很常见,但到目前为止我已经花了大约4天时间,尝试自己修复它,使用我在互联网上找到的所有智能建议 - 不幸的是 - 我失败了。
我设法使openCV2.4.6与我的VisualStudio 2012一起工作,或者至少就是我能够通过这个例子从我的网络摄像头流式传输视频后的假设:
#include "stdafx.h"
#include "opencv2/opencv.hpp"
int main( int argc, const char** argv )
{
CvCapture* capture;
IplImage* newImg;
while (true)
{
capture = cvCaptureFromCAM(-1);
newImg = cvQueryFrame( capture );
cvNamedWindow("Window1", CV_WINDOW_AUTOSIZE);
cvShowImage("Window1", newImg);
int c = cvWaitKey(10);
if( (char)c == 27 ) { exit(0); }
}
cvReleaseImage(&newImg);
return 0;
}
一切都很好,所以我决定玩它,我尝试使用简单的图像处理操作,例如将rgb转换为灰度。我将代码修改为以下内容:
#include "stdafx.h"
#include "opencv2/opencv.hpp"
int main( int argc, const char** argv )
{
CvCapture* capture;
IplImage* img1;
IplImage* img2;
while (true)
{
capture = cvCaptureFromCAM(-1);
img1 = cvQueryFrame( capture );
img2 = cvCreateImage(cvGetSize(img1),IPL_DEPTH_8U,1);
cvCvtColor(img1,img2,CV_RGB2GRAY);
cvNamedWindow("Window1", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Window2", CV_WINDOW_AUTOSIZE);
cvShowImage("Window1", img1);
cvNamedWindow("Window2", CV_WINDOW_AUTOSIZE);
int c = cvWaitKey(10);
if( (char)c == 27 ) { exit(0); }
}
cvReleaseImage(&img1);
cvReleaseImage(&img2);
return 0;
}
这就是噩梦开始的地方。
opencvbegginer.exe中0x000007FEFD57AA7D处的未处理异常:Microsoft C ++异常:cv ::内存位置0x000000000030F920的异常。
我做了一些研究并尝试了一些解决方案,例如将opencv_core246.lib交换到opencv_core246d.lib等等。我希望它可能会工作一段时间,但是现实再次打破了我的msvcp100d.dll缺失。我试图更新所有可再发行组件包,但它没有改变我不断收到此错误的事实。我试图找到如何以另一种方式修复它,我找到了一些论坛,他们告诉我们转到C / C ++属性并将运行时库更改为MTd,所以......我也试过了,但是 - 你可以现在注意 - 它没有用。
在目前这一刻,我对如何解决这个问题的想法已经不多了,所以我真的很感激任何帮助。
干杯
PS。要添加的重要事项:当我得到未处理的异常时,opencv'跟我说',说
OpenCV错误:错误的参数 未知函数,文件...... \ scr \ opencv \ modules \ core \ src \ array.cpp, 第1238行
然而,我已经假定我当时对我的耐痴性代码并不够聪明,而且我尝试了其他一些由有能力的人编写的代码 - 不幸的是,我一直得到完全相同的错误(在我改变上面提到的事情之后,其余部分也是一样的。)
答案 0 :(得分:0)
如果img1 == NULL
,则会在cvGetSize(img1)
上崩溃。尝试将cvQueryFrame
后面的代码括在if (img1 != NULL)
中。
但是,如果它为每一帧返回NULL
,则表示您的相机/驱动程序/捕获帧的方式有问题。
您还应该将cvNamedWindow
移到循环之外,因为不需要为每个帧重新创建它。