man*_*ans 2 c++ opencv image bitmap
我有这个代码将opencv图像转换为位图:
void processimage(MAT imageData)
{
Gdiplus::Bitmap bitmap(imageData.cols,imageData.rows,stride, PixelFormat24bppRGB,imageData.data);
// do some work with bitmap
}
Run Code Online (Sandbox Code Playgroud)
当图像的大小是2748 X 3664时,它运行良好.但是我想要处理尺寸为1374 X 1832的图像,它不起作用.
错误是无效的参数(2).
我查了一下,可以确认:
在2748*3664:
在1374 X 1832
所以一切对我来说都是正确的,但它会产生错误.
有什么问题,我该如何解决?
根据答案解释了为什么我无法创建位图.我终于以这种方式实现了它:
Mat newImage;
cvtColor(imageData, newImage, CV_BGR2BGRA);
Gdiplus::Bitmap bitmap(newImage.cols,newImage.rows,newImage.step1(), PixelFormat32bppRGB,newImage.data);
Run Code Online (Sandbox Code Playgroud)
如此有效,我将输入图像转换为每像素4字节,然后使用转换为位图.
所有归功于Roger Rowland 的答案.
我认为问题是BMP格式的步幅必须是4的倍数.
您的较大图像的步幅为8244,有效(8244/4 = 2061),但您的较小图像的步幅为4122,而不是(4122/4 = 1030.5).
正如它在MSDN上所说的stride参数(我强调):
整数,指定一条扫描线的开头与下一条扫描线之间的字节偏移量.这通常(但不是必须)像素格式中的字节数(例如,每像素16位的2)乘以位图的宽度.传递给此参数的值必须是四的倍数.
假设你的步伐是正确的,我认为你唯一的选择是逐行复制它.所以,像:
Gdiplus::Bitmap的所需大小和格式| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |