【发布时间】:2018-02-21 15:39:54
【问题描述】:
我是 C++ 和 opencv 的新手,在运行背景减法器模型时遇到了困难。我正在使用 Visual Studio 2017 (VC++) 和 opencv 3.2。
我需要使用BackgroundSubtractorMOG2,它可以很好地创建模型,但是当我传递一个从编码图像转换而来的新帧时会抛出异常(因为我使用的 USB3 摄像头不允许直接读取由 opencv 帧)到 cv::Mat。下面是代码sn-p
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 信息不可用,没有为 opencv_world320d.dll 加载符号> cv::detail::PtrOwner *
stored 0x0000023afa29baa0 信息不可用,没有为 opencv_world320d.dll 加载符号> cv::BackgroundSubtractorMOG2 *
即使 opencv320d.lib 已正确链接,并且在同一程序中为我运行了一些其他基本的 opencv 示例(例如,cv::subtract、cv::calcHist 等)。我想知道是不是因为图像尺寸太大(4608x3288)和我正在创建的 bitmpaFrame 可能有问题?
或者如果我试图以不允许的方式访问流/内存中的图像数据?
【问题讨论】:
-
我还包括了#include "opencv2/video/background_segm.hpp" 并做了 cv::Mat fgMaskMOG; Ptr
bgm;bgm = createBackgroundSubtractorMOG2(); -
您可能正在使用 vc14 链接到 OpenCV 构建。 opencv_world320d.lib 的文件夹是什么?
-
嗨 Miki 是的,实际上它链接了 vc14 和文件夹是 C:\OPENCV320\opencv\build\x64\vc14\lib。但是build文件夹中除了vc14没有其他build吗?我对需要进一步研究的构建版本了解不多:(
-
OpenCV 3.3 应该具有 vs2017 的预构建二进制文件。你最好安装那个
-
好的,谢谢,这意味着这不是我复制的部分中的代码问题:)。我也下载了3.3版本,我会链接它,看看是否能解决这个问题。谢谢
标签: visual-studio opencv visual-c++ access-violation