c++ - OpenCV:使用 PGM 文件。为什么我生成的 PGM 文件有 3 个通道 (RGB)?
问题描述
我尝试使用 OpenCV 生成 PGM 文件,这就是我的做法:
ori = imread("images/apple.jpg");
cvtColor(ori, gray, COLOR_BGR2GRAY); //convert to gray
vector<int> params;
params.push_back(IMWRITE_PXM_BINARY);
params.push_back(1);
imwrite("images/apple1.pgm", gray, params); //because it needs gray input
pgm = imread("images/apple1.pgm");
imshow("PGM", pgm);
我可以成功生成 PGM 文件并使用imshow
. 但是我注意到我的 PGM 文件有 3 个通道 (RGB),这是出乎意料的,因为它应该每个像素只有 1 个通道。
我将相同的文件加载到 GIMP 中并将其导出为 PGM 格式。当我也尝试在 OpenCV 上显示它时imshow
,它显示了来自我的代码的 GIMP 和 PGM 的右通道(1 通道)比较如下:
注意每个图像的左下角,通道数。我试图用这个将它转换成单通道:
pgm.convertTo(pgm, CV_8U);
但我的 PGM 图像仍然由 3 个通道组成。任何建议我的 PGM 转换中缺少哪一部分?
解决方案
推荐阅读
- r - 检查每个向量元素是否减少 1 或更多的函数
- javascript - Babel 继承丢失原型
- python - 如何使用 python curses 删除面板和窗口
- laravel - 使用rabbitmq在几个docker容器之间租一个订单
- jquery - jQuery - 如果类存在于文档中,并且如果它为空
- c# - 查看未在 NET Core 上呈现
- c# - WPF - 在没有设计器的情况下创建实体布局
- javafx - JavaFx 属性与屏幕上的多个对象绑定
- java - SOLR documentCache JMX 指标说明
- angular - 将元素推送到响应式表单数组会导致 ExpressionChangedAfterItHasBeenCheckedError