gpt4 book ai didi

c++ - 在 OpenCV C++ 中将 RGB 彩色图像转换为索引彩色图像类型

转载 作者:行者123 更新时间:2023-11-28 01:23:44 24 4
gpt4 key购买 nike

我想将 rgb 图像转换为索引颜色类型。

这是我的 C++ 代码。这是转换为灰度。

我该怎么办?

Mat black_background = imread("image_path", IMREAD_COLOR); 

Mat output;
cvtColor(black_background, output, cv::COLOR_RGB2GRAY);

imwrite("save_path", output);

最佳答案

我不相信 OpenCVimwrite() 支持编写调色板化的 PNG。一种选择可能是编写您喜欢的任何其他格式,然后使用 ImageMagick 将其转换为调色板 PNG。

ImageMagick 包含在大多数 Linux 发行版中,并且可用于 macOS 和 Windows。

因此,在终端或 Windows 上的命令提示符中:

magick input.png PNG8:result.png

ImageMagick 的 v7 之前:

convert input.png PNG8:result.png

PNG8: 前缀强制调色结果。


如果您不想事后显式地转换您的文件,您可以使用 OpenCVimwrite() 将它们作为 PNG 文件写入文件系统,然后使用 C++ 的 system() 获取 ImageMagick 来转换它们:

#include <stdlib.h>

...

imwrite('result.png', image);

// Delegate conversion to palette image to ImageMagick
system("magick result.png PNG8:result.png');

对于更焦虑/更精明的读者:

  • 是的,与其他 Unix 实用程序不同,通过 ImageMagick 使用相同的文件作为输入和输出是可以的,而且不用担心损坏,因为文件是完整读取的在被处理然后写出之前,

  • 是的,ImageMagick 将隐式处理将图像中的颜色减少为调色板版本所需的量化,

  • 是的,您可以强制使用其他前缀的其他类型的 PNG 文件,例如RGB24:result.png 将导致 RGB888 输出,RGB32:result.png 将导致 RGBA8888 输出,RGB48:result.png 将导致16 位红色、16 位绿色和 16 位蓝色等。

关于c++ - 在 OpenCV C++ 中将 RGB 彩色图像转换为索引彩色图像类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54904891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com