1

我使用 CImg 进行图像处理工作。我目前只处理灰度 JPG、BMP、TIFF 图像。我使用 CImg 功能面临的问题如下:

CImg 以下列方式存储像素值。R1R2R3R4…………G1G2G3G4…………B1B2B3B4…………

即使是灰度图像,也会单独创建 3 个不同的通道。这使我的工作变得非常复杂。只是为了将值从一个图像复制到另一个图像,我需要复制像素的所有组件。我需要遍历所有使我的算法变慢的通道。

因为我只处理灰度图像,所以它是单通道还是多通道对我来说并不重要。有没有办法在 CImg 中将 3 通道图像转换为单通道图像。请尽快让我知道。

谢谢大家

4

2 回答 2

1

使用CImg::channel(int c)功能:

CImg<float> img("input.jpg"); //3 channel
img.channel(0); //now single channel
img.save("output.jpg"); //will save as a 3 channel image again

http://cimg.sourceforge.net/reference/structcimg__library_1_1CImg.html#a83af84298188d07c59c49dd0ed4d2714

于 2011-01-16T15:37:48.627 回答
0

如果你只对单通道图像感兴趣,不妨将它们保存为单通道PGM图像,CImg可以直接读写,不需要任何额外的库:

#include "CImg.h"
using namespace cimg_library;
int main() {
   // Load colour image
   CImg<unsigned char> image("image.png");

   // Extract Red channel, which is same as Green and Blue in greyscale
   image.channel(0);

   // ALTERNATIVE TO PREVIOUS LINE IS TO USE LUMINANCE
   // image.RGBtoYCbCr().channel(0);

   // Save as single channel PGM file
   image.save_pnm("result.pgm");
}

您可以稍后将PGM文件(PGM 的 Wikipedia 描述)转换为 a JPEG、 orPNGTIFF使用ImageMagick

convert result.pgm image.jpg
convert result.pgm image.png

关键词:图像处理、图像处理、C++、库、CImg、NetPBM、PBMplus、PBM、PGM、PPM、PAM、灰度、灰度、单通道

于 2017-08-20T21:15:32.240 回答