CImg中的单通道图像

时间:2010-01-18 15:01:02

标签: cimg

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

CImg以下列方式存储Pixel值。 R1R2R3R4 ............ G1G2G3G4 ......... ......... B1B2B3B4

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

由于我只使用灰度图像,因此无论是单通道还是多通道都无关紧要。有没有办法将3通道图像转换为单通道CImg。请尽快告诉我。

提前谢谢大家

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您只对单通道图像感兴趣,也可以将它们保存为 CImg 可以直接读取和写入的单通道PGM图像,而无需任何其他库:

#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文件(Wikipedia description of PGM)转换为JPEGPNGTIFF ImageMagick

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

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