如何使用C++在十六进制代码(如(#FFFFFF))中打印图像中的所有颜色? 什么样的库,我需要为了逐像素提取所有的颜色像素?以及如何使用该库循环到所有像素的代码? 对不起,我的英语不好。 谢谢。如何以十六进制颜色(6位数)输出图像的每个像素的所有颜色
回答
如果我可以大胆地引用艾萨克·牛顿爵士,在十六进制转储的图像的像素的最简单方法是“站在肩上的巨人“。在这种情况下,巨人是ImageMagick,它安装在大多数Linux发行版上,并可免费获得,用于macOS和Windows。
在命令行,只需键入:
convert picture.jpg txt:
输出
# ImageMagick pixel enumeration: 300,168,65535,srgb
0,0: (64507,56283,34952) #FBDB88 srgb(251,219,136)
1,0: (65535,58596,37779) #FFE493 srgb(255,228,147)
2,0: (65535,56026,36237) #FFDA8D srgb(255,218,141)
3,0: (62708,51400,33153) #F4C881 srgb(244,200,129)
4,0: (62965,49858,33153) #F5C281 srgb(245,194,129)
5,0: (63222,48830,33153) #F6BE81 srgb(246,190,129)
6,0: (63479,48316,33924) #F7BC84 srgb(247,188,132)
7,0: (64250,48830,34952) #FABE88 srgb(250,190,136)
第二最简单的选择是CImg
C++库,则可以从here获得。我相信它比OpenCV
简单得多,例如,在Raspberry Pi上,需要大约1GB的空间和超过一小时的时间才能构建,而CImg
是一个单一的只有标头的文件,您可以在代码中包含这些文件,而不需要库被安装,它可以做你所要求的。
////////////////////////////////////////////////////////////////////////////////
// main.cpp
//
// CImg example of dumping pixels in hex
//
// Build with: g++-6 -std=c++11 main.cpp -lpng -lz -o main
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <cstdlib>
#define cimg_use_png // Do this if you want CImg to process PNGs itself without resorting to ImageMagick
#define cimg_use_jpeg // Do this if you want CImg to process JPEGs itself without resorting to ImageMagick
#define cimg_use_tiff // Do this if you want CImg to process TIFFs itself without resorting to ImageMagick
#define cimg_use_curl // Do this if you want CImg to be able to load images via a URL
#define cimg_display 0 // Do this if you don't need a GUI and don't want to link to GDI32 or X11
#include "CImg.h"
using namespace cimg_library;
using namespace std;
int main() {
// Load image
CImg<unsigned char> img("input.png");
// Get width, height, number of channels
int w=img.width();
int h=img.height();
int c=img.spectrum();
cout << "Dimensions: " << w << "x" << h << " " << c << " channels" <<endl;
// Dump all pixels
for(int y=0;y<h;y++){
for(int x=0;x<w;x++){
char hex[16];
sprintf(hex,"#%02x%02x%02x",img(x,y,0),img(x,y,1),img(x,y,2));
cout << y << "," << x << " " << hex << endl;
}
}
}
我们可以通过创建从红 - 蓝小的梯度图像与ImageMagick的这样测试:
convert -size 1x10 gradient:red-blue input.png
这被放大:
和像这样运行程序 - 希望你可以看到十六进制从ff0000
(全红)到0000ff
(全蓝):
./main
样本输出你想在控制台的十六进制值
Dimensions: 1x10 3 channels
0,0 #ff0000
1,0 #8d0072
2,0 #1c00e3
3,0 #aa0055
4,0 #3800c7
5,0 #c70038
6,0 #5500aa
7,0 #e3001c
8,0 #72008d
9,0 #0000ff
非常感谢! – owenizedd
所有你需要的是OpenCV。要加载的图片,让像素和写十六进制值:
#include <opencv\cv.h>
//....
Mat img = imread(filename);
for (int x = 0; x < img.cols; x++) {
for (int y = 0; y < img.rows; y++) {
Vec3b color = img.at<Vec3b>(y, x);
cout << std::hex << color.val[0]; //blue
cout << std::hex << color.val[1]; //green
cout << std::hex << color.val[2]; //red
//or
int colorint = img.at<int>(y, x);
cout << std::hex << colorint; //redgreenblue
}
}
小心! OpenCV默认使用BGR,因此索引0给出蓝色组件,1给出绿色,2给出红色。 – Baiz
谢谢,我已更改代码 – user3811082
- 1. 如何十六进制颜色转换为RGB颜色(24位)
- 2. 检索给定像素的颜色的十六进制代码
- 3. 将多个十六进制颜色转换为图像
- 4. 确定C#中图像的颜色十六进制值
- 5. 如何获取位图所有十六进制颜色的列表?
- 6. 获取两种颜色之间所有颜色的十六进制代码?
- 7. 转换颜色的十六进制值
- 8. 用十六进制颜色寻找最近的PMS颜色?
- 9. 阅读单色位图像素颜色
- 10. iPhone:如何获取图像的每个像素的颜色?
- 11. 将十六进制颜色代码转换为颜色名称
- 12. 转换UINT颜色ARGB十六进制颜色KML
- 13. 从十六进制颜色代码中找到颜色名称
- 14. 过滤器十六进制颜色
- 15. 解析十六进制'0x0976b8'颜色android
- 16. 颜色十六进制到imagefilledrectangle
- 17. rbg或十六进制选择颜色?
- 18. 十六进制网页颜色
- 19. R/Dygraphs十六进制颜色代码
- 20. 颜色十六进制计算
- 21. 如何填充颜色完全像这个图像的颜色?
- 22. 更改位图的像素颜色
- 23. Android - 更改位图的像素颜色
- 24. 在JS中生成随机生成的十六进制颜色的免费十六进制颜色?
- 25. 更改.gif图像中每个像素的颜色数量?
- 26. 滑出图像的颜色
- 27. 将十六进制颜色值转换为近似颜色名称的函数?
- 28. 如何绘制十六进制代码颜色的矢量
- 29. 提取图像中每个像素的十六进制值
- 30. OpenCV:如何填充每个像素的每个RGB颜色值的RGB图像?
做什么? 'long color = pixelmap [pixel]; std :: cout << std :: hex << color;' – user3811082
@ user3811082如何将图像加载到C++? – owenizedd
@ user3811082我想知道每个像素整个图像的十六进制值 – owenizedd