如何在Magick ++中以灰度格式写出图像

时间:2014-04-30 12:58:08

标签: c++ image-processing imagemagick magick++

如何以灰度格式保存Magick::Image?我使用ImageMagick解码图像并将结果写入OpenCV矩阵。我现在正在做的是读取彩色图像,然后通过OpenCV将其转换为灰度:

Magick::Image image("test.png");
cv::Mat mat(image.rows(), image.columns(), CV_8UC3);
image.write(0, 0, image.columns(), image.rows(), "BGR", Magick::CharPixel, mat.data);
cv::cvtColor(mat, mat, CV_BGR2GRAY);

我想将图像写入已经是灰度的cv::Mat,没有中间颜色图像。这应该非常简单,但是无法从文档中找到它并希望得到任何帮助。

此外,我想了解如何检测图片是否包含Alpha通道?

1 个答案:

答案 0 :(得分:4)

要将图像设置为灰度,请在将图像blob写入cv之前简单调用Magick::Image.type( Magick::ImageType )

Magick::Image image("test.png");
image.type( Magick::GrayscaleType );
image.write(0, 0, image.columns(), image.rows(), "BGR", Magick::CharPixel, mat.data);

要检测图像是否透明,只需检查Magick::Image.matte()是否返回true。

Magick::Image image("test.png");
std::cout << "transparent = " << ( image.matte() ? "true" : "false") << std::endl;