CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10);
我怎样才能rgb
得到ptr
?
CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10);
我怎样才能rgb
得到ptr
?
在 Ubuntu 10.04 上测试,手工制作的 3x3 RGB 图像保存为test.png
:
sudo apt-get install cimg-dev
源文件cimg_test.cpp
:
#include <iostream>
using namespace std;
#include <CImg.h>
using namespace cimg_library;
int main()
{
CImg<unsigned char> src("test.png");
int width = src.width();
int height = src.height();
cout << width << "x" << height << endl;
for (int r = 0; r < height; r++)
for (int c = 0; c < width; c++)
cout << "(" << r << "," << c << ") ="
<< " R" << (int)src(c,r,0,0)
<< " G" << (int)src(c,r,0,1)
<< " B" << (int)src(c,r,0,2) << endl;
return 0;
}
编译并运行:
g++ cimg_test.cpp -lX11 -lpthread -o cimg_test ./cimg_test 3x3 (0,0) = R0 G0 B0 (0,1) = R255 G0 B0 (0,2) = R0 G255 B0 (1,0) = R0 G0 B255 (1,1) = R128 G128 B128 (1,2) = R0 G0 B128 (2,0) = R128 G0 B0 (2,1) = R0 G128 B0 (2,2) = R255 G255 B255
有用。
从CImg 文档(第 34 页的第 6.13 节和第 120 页的第 8.1.4.16 节)看来,该data
方法可以采用四个参数:x、y、z 和 c:
T* data(const unsigned int x, const unsigned int y = 0,
const unsigned int z = 0, const unsigned int c = 0)
...其中c
指的是颜色通道。我猜如果您的图像确实是 RGB 图像,那么使用 0、1 或 2 的值c
将为您提供给定x, y
位置的红色、绿色和蓝色分量。
例如:
unsigned char *r = src.data(10, 10, 0, 0);
unsigned char *g = src.data(10, 10, 0, 1);
unsigned char *b = src.data(10, 10, 0, 2);
(但这只是一个猜测!)
编辑:
看起来 CImg 还有一个 operator() 以类似的方式工作:
unsigned char r = src(10, 10, 0, 0);
访问数据的最简单方法是使用()
操作员:
unsigned char r = img(10,10,0,0);
unsigned char g = img(10,10,0,1);
unsigned char b = img(10,10,0,2);
您可能会感到困惑,因为 CImg 以非交错方式存储原始数据。即存储您的原始数据R1, R2, ..., G1, G2, ..., B1, B2, ...
而不是R1, G1, B1, R2, G2, B2, ...
查看:http ://cimg.eu/reference/group__cimg__storage.html
.data()
只返回一个指针,因此要像上面那样直接访问数据,您可以:
CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10);
unsigned char r = ptr[0];
unsigned char g = ptr[0+width*height];
unsigned char b = ptr[0+2*width*height];
@wamp:我不了解 CImg,但 RGB 中的灰度图像有:
R = G = B
在 CMYK 中:
C = M = Y = 0
K = 亮度
所以你甚至不需要一个函数......