使用opencv将PNG转换为具有透明度的位图

时间:2016-04-07 07:35:48

标签: c++ opencv bitmap directx

我有一个透明的png图像。我使用opencv读取该文件。然后我将其转换为位图,如下所示。

Mat image = imread("fruit.png", -1);
BYTE * rawdata = reinterpret_cast<BYTE*>(image.data);
m_pBitmap->CopyFromMemory(NULL, rawdata, image.cols * 4);
m_pRenderTarget->DrawBitmap(m_pBitmap);

但在转换后,某些图像显示出一些透明度问题...与此link相同且图像未显示完整。但是当我们使用imwrite保存Mat图像时没有问题。 所以我面临的问题是

  1. 某些图像的透明度会丢失。
  2. 未显示完整图像数据。 input image output image

1 个答案:

答案 0 :(得分:3)

您应该在OpenCV中转换图像格式,因为不同的库有自己的解码和表示方法。

请尝试以下代码:

Mat image = imread("fruit.png", -1);
Mat image_bmp;
image.convertTo(image_bmp, CV_8UC3);
imwrite("fruit.bmp", image_bmp);

您可以通过文件名中的.bmp.jpg指定要保存图片的格式。

结果如下所示(当然调整大小后):

enter image description here