2017-09-13 63 views
1

我是C++和opencv的新手,并且难以运行背景减法器模型。我使用的是Visual Studio 2017(VC++)和opencv 3.2。BackgroundSubtractorMOG2 bgm->在Visual Studio 2017中抛出异常

我需要使用BackgroundSubtractorMOG2它创建的模型很好但抛出异常,当我通过它从编码图像转换的新帧(因为我使用USB3摄像头,不允许直接读取帧通过opencv)cv :: Mat。代码段低于

if (EncodeRawImage(pRawImage, &frameDesc, imageFormat, &pEncodedImage, &encodedImageSize) == SUCCESS) { 
    // Convert current raw image to openCV Mat format for analysis 
    auto store = gcnew cli::array<Byte>(encodedImageSize); 
    System::Runtime::InteropServices::Marshal::Copy(IntPtr(pEncodedImage), store, 0, encodedImageSize); 
    auto stream = gcnew System::IO::MemoryStream(store); 

    System::Drawing::Bitmap^ bitmapFrame = safe_cast<System::Drawing::Bitmap ^> (Image::FromStream(stream)); 
    Mat imgBuf = Mat(bitmapFrame->Width, bitmapFrame->Height, CV_8U, pEncodedImage); 
    Mat imgMat = imdecode(imgBuf, CV_LOAD_IMAGE_COLOR);    

    bgm->apply(imgMat , fgMaskMOG); 
    returnCode = 1; 
} 

唯一的例外是

所有者0x0000023afa2a2ec0信息不可用,则不装载opencv_world320d.dll> CV ::详细:: PtrOwner *

符号存储0x0000023afa29baa0信息不可用,没有符号加载opencv_world320d.dll> cv :: BackgroundSubtractorMOG2 *

即使你h opencv320d.lib链接正确,并在同一个程序中运行一些其他基本的opencv样本(例如,cv :: subtract,cv :: calcHist等)。我想知道是否因为图像尺寸太大(4608x3288)和我创建的bitmpaFrame可能有问题?

或者如果我试图以不允许的方式访问流/内存中的图像数据?

+0

我还包括#include“opencv2/video/background_segm.hpp”并做了cv :: Mat fgMaskMOG; Ptr bgm; bgm = createBackgroundSubtractorMOG2(); – user3377101

+0

您可能会链接到使用vc14构建OpenCV。什么是opencv_world320d.lib的文件夹? – Miki

+0

嗨三木是的,其实它的链接vc14和文件夹是C:\ OPENCV320 \ opencv \ build \ x64 \ vc14 \ lib。但除了vc14之外,build文件夹中没有其他内部版本?我没有太多关于构建版本的知识,我需要学习更多关于:( – user3377101

回答

0

即使信息未找到字符串仍然存在,当我做断点时,我刚刚发现模型因为大图像大小而抛出异常,正如我在原始问题(4608x3288)中提到的那样。我调整图像大小(resize(newImageMat, newImageMat, cv::Size(1000, 1000 * newImageMat.rows/newImageMat.cols), INTER_LINEAR);),错误消失,模型学习并显示结果。该文本可能是一个Visual Studio错误,因为我正在阅读有关类似的问题https://stackoverflow.com/a/7736034/3377101

相关问题