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

How to write image in grayscale format in Magick++

本文关键字:格式 图像 灰度 Magick++      更新时间:2023-10-16

如何将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通道?

要将图像设置为灰度级,只需在将图像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;