BackgroundSubtractorMOG2 bgm->在Visual Studio 2017中应用抛出异常

时间:2017-09-13 04:28:33

标签: visual-studio opencv visual-c++ access-violation

我是C ++和opencv的新手,并且难以运行背景减法器模型。我正在使用Visual Studio 2017(VC ++)和opencv 3.2。

我需要使用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加载符号&gt; cv :: detail :: PtrOwner *

     

已存储0x0000023afa29baa0信息不可用,没有为opencv_world320d.dll加载符号&gt; cv :: BackgroundSubtractorMOG2 *

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

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

1 个答案:

答案 0 :(得分:0)

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