我不熟悉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可能有问题?
或者,如果我试图以不允许的方式访问流/内存中的图像数据?