BackgroundSubtractorMOG2 bgm->apply 在 Visual Studio 2017 中抛出异常
BackgroundSubtractorMOG2 bgm->apply throws exception in Visual Studio 2017
我是 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;
}
例外是
owner 0x0000023afa2a2ec0 Information not available, no symbols loaded for opencv_world320d.dll> cv::detail::PtrOwner *
stored 0x0000023afa29baa0 Information not available, no symbols loaded for opencv_world320d.dll> cv::BackgroundSubtractorMOG2 *
即使 opencv320d.lib 已正确链接,并且在同一程序中为我提供了一些其他基本的 opencv 示例 运行(例如,cv::subtract、cv::calcHist 等) .我想知道是不是因为图像尺寸太大 (4608x3288) 并且我正在创建的 bitmpaFrame 可能有问题?
或者如果我试图以不允许的方式访问 stream/memory 中的图像数据?
尽管在执行断点时信息未找到字符串仍然存在,但我只是发现模型抛出异常是因为我在原始问题 (4608x3288) 中提到的图像尺寸过大。我调整图像大小 (resize(newImageMat, newImageMat, cv::Size(1000, 1000 * newImageMat.rows / newImageMat.cols), INTER_LINEAR);
),错误消失,模型学习并显示结果。该文本可能是一个 Visual Studio 错误,因为我在这里阅读了类似的问题 ?
我是 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;
}
例外是
owner 0x0000023afa2a2ec0 Information not available, no symbols loaded for opencv_world320d.dll> cv::detail::PtrOwner *
stored 0x0000023afa29baa0 Information not available, no symbols loaded for opencv_world320d.dll> cv::BackgroundSubtractorMOG2 *
即使 opencv320d.lib 已正确链接,并且在同一程序中为我提供了一些其他基本的 opencv 示例 运行(例如,cv::subtract、cv::calcHist 等) .我想知道是不是因为图像尺寸太大 (4608x3288) 并且我正在创建的 bitmpaFrame 可能有问题?
或者如果我试图以不允许的方式访问 stream/memory 中的图像数据?
尽管在执行断点时信息未找到字符串仍然存在,但我只是发现模型抛出异常是因为我在原始问题 (4608x3288) 中提到的图像尺寸过大。我调整图像大小 (resize(newImageMat, newImageMat, cv::Size(1000, 1000 * newImageMat.rows / newImageMat.cols), INTER_LINEAR);
),错误消失,模型学习并显示结果。该文本可能是一个 Visual Studio 错误,因为我在这里阅读了类似的问题 ?