我有一个24bpp GdiPlus::Bitmap
,我需要转换成IplImage
(opencv)。 有谁知道如何做到这一点?GdiPlus ::位图转换为OpenCV IplImage
2
A
回答
1
这里是你如何做到这一点。
1)创建一个新的目标与源图像的尺寸的IplImage对象(GdiPlus ::位图)
2.)使用lockbits
3.获取源图像的PixelData取出把手)复制源PixelData取出的目标图象 - 源图像的
4)UnlockBits
0
这里是唯一的区别您的问题的答案,该位图转换成垫:Convert Bitmap to Mat
0
难度在于Gdiplus :: Bitmap理论上支持很多奇特的像素格式,所以完全一般而言,转换将是冗长的。但基本情况如下:
IplImage* GdiPlusBitmapToOpenCvImage(Gdiplus::Bitmap* bmp)
{
auto format = bmp->GetPixelFormat();
if (format != PixelFormat24bppRGB)
return nullptr;
Gdiplus::Rect rcLock(0, 0, bmp->GetWidth(), bmp->GetHeight());
Gdiplus::BitmapData bmpData;
bmp->LockBits(&rcLock, Gdiplus::ImageLockModeRead, format, &bmpData);
int buffSz = bmpData.Stride * bmpData.Height;
int depth = 8, channel = 3;
IplImage* cvImage = cvCreateImage(CvSize(rcLock.Width, rcLock.Height), depth, channel);
const unsigned char* src = static_cast<unsigned char*>(bmpData.Scan0);
std::copy(src, src + buffSz, cvImage->imageData);
bmp->UnlockBits(&bmpData);
return cvImage;
}
相关问题
- 1. 如何将8位OpenCV IplImage *转换为32位IplImage *?
- 2. 从位图转换为MIplImage或IplImage c#
- 3. OpenCV:在Python中从NumPy转换为IplImage
- 4. opencv的:转换垫的IplImage为cvLabel
- 5. 从Mat元素到IplImage的opencv转换*
- 6. 转换垫的IplImage * OpenCV中和C/C++
- 7. 通过opencv将Mat转换为位图
- 8. 将GDIPlus :: Bitmap转换为cv :: Mat(OpenCV C++接口)
- 9. OpenCV:如何旋转IplImage?
- 10. 如何使用OpenCv将字节数组转换为IplImage?
- 11. 如何将IplImage(OpenCV)快速转换为ALLEGRO_BITMAP(A5)?
- 12. GDIplus比例位图
- 13. iplimage to mat 32位转换错误
- 14. 转换NSImage到IplImage
- 15. 从tagRECT/CRect转换为Gdiplus :: Rect
- 16. 错误转换的IplImage **来的IplImage *
- 17. 转换OpenCV垫到Android位图
- 18. Gdiplus ::位图释放内存
- 19. Emgu OpenCV Intptr到IplImage?
- 20. 将IplImage类型IPL_LABEL转换为IplImage类型IPL_DEPTH_8U
- 21. 如何将3通道IplImage转换为8位?
- 22. 将pbm文件转换为IplImage
- 23. 将IPLimage转换为h.263格式
- 24. 将IplImage转换为javacv中的BufferedImage
- 25. 将IplImage *类型转换为CvMat
- 26. 如何将IplImage转换为lept.PIX
- 27. 将矩阵类转换为IplImage *
- 28. 在OpenCV NSImage泄漏到IplImage转换器程序
- 29. 将IplImage显示为Android位图
- 30. 转换SDL_Surface到的IplImage