0

我确实意识到这个问题很常见,但到目前为止我已经花了大约 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++ 异常:内存位置 0x000000000030F920 处的 cv::Exception。

我做了一些研究并尝试了一些解决方案,例如将 opencv_core246.lib 交换为 opencv_core246d.lib 等。有那么一秒钟,我希望它可能会起作用,但由于缺少 msvcp100d.dll,现实再次打击了我。我尝试更新所有可再发行包,但这并没有改变我不断收到此错误的事实。我试图找出如何以另一种方式修复它,我找到了一些论坛,他们告诉他们去 C/C++ 属性并将运行时库更改为 MTd,所以......我也试过这个,但是 - 你可以现在注意 - 它没有工作。

目前,我对如何解决这个问题没有任何想法,所以我将非常感谢任何帮助。

干杯

PS。要补充的重要一点:当我遇到未处理的异常时,opencv“跟我说话”,说

OpenCV 错误:未知函数中的参数错误,文件 ......\scr\opencv\modules\core\src\array.cpp,第 1238 行

但是,我当时已经假设我的防白痴代码不够聪明,我尝试了一些由有能力的人编写的其他代码 - 不幸的是,我一直遇到完全相同的错误(其余的是同样,在我更改上述内容之后)。

4

1 回答 1

0

如果img1 == NULL, 那么它会在cvGetSize(img1). 尝试cvQueryFrameif (img1 != NULL).

但是,如果它NULL为每一帧都返回,则意味着您的相机/驱动程序/捕获帧的方式有问题。

您还应该移动cvNamedWindow循环的外部,因为不需要为每一帧重新创建它。

于 2013-07-23T19:22:41.590 回答