代码之家  ›  专栏  ›  技术社区  ›  Bilal

BackgroundSubtractorMOG2 bgm->应用在Visual Studio 2017中引发异常

  •  1
  • Bilal  · 技术社区  · 7 年前

    我不熟悉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;
     }
    

    例外情况是

    存储的0x0000023afa29baa0信息不可用,没有为opencv_world320d加载符号。dll>cv::背景SubtractorMog2*

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bilal    7 年前

    尽管当我做断点时,信息未找到字符串仍然存在,但我只是发现模型引发了异常,因为正如我在原始问题(4608x3288)中提到的那样,图像大。我调整图像大小( resize(newImageMat, newImageMat, cv::Size(1000, 1000 * newImageMat.rows / newImageMat.cols), INTER_LINEAR); https://stackoverflow.com/a/7736034/3377101