【发布时间】:2014-07-09 13:47:13
【问题描述】:
我需要将 Gdiplus::Bitmap 转换为 cv::Map 格式。 我正在使用此代码来执行此操作:
Gdiplus::Bitmap* enhanced = ...; // some Bitmap
Gdiplus::BitmapData bmp_data = {};
Gdiplus::Rect rect(0, 0, enhanced->GetWidth(), enhanced->GetHeight());
enhanced->LockBits(&rect, Gdiplus::ImageLockModeRead, enhanced->GetPixelFormat(), &bmp_data);
Mat imageMap(enhanced->GetHeight(), enhanced->GetWidth(), CV_8UC3, bmp_data.Scan0, std::abs(bmp_data.Stride)); // construct Map from Bitmap data. The problem is probably here
cvNamedWindow("w", 1);
cvShowImage("w", &imageMap); // runtime error (access violation)
cvWaitKey(0);
我有一个运行时错误,因为 imageMap 构造不正确。我在这里做错了什么?我会很感激你的解释。
【问题讨论】:
-
请避免使用旧的 c-api 函数,改用:
cv::imshow("w", imageMap) -
GetPixelFormat返回的像素格式是什么? -
致@berak:这是问题所在!请把它放在一个答案中。我会接受的。
标签: c++ opencv bitmap bitmapdata