2017-09-13 88 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