如何使用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. 將多個十六進制顏色轉換爲圖像
- 5. Php函數十六進制或rgb顏色的顏色名稱
- 6. 確定C#中圖像的顏色十六進制值
- 7. 如何獲取位圖所有十六進制顏色的列表?
- 8. 十六進制顏色代碼多個#
- 9. 獲取兩種顏色之間所有顏色的十六進制代碼?
- 10. 給出的顏色Python輸出#RRGGBB十六進制值
- 11. 十三進制顏色的十六進制圖表
- 12. 轉換顏色的十六進制值
- 13. 訂購顏色的十六進制值
- 14. 用十六進制顏色尋找最近的PMS顏色?
- 15. 的jQuery - 獲得元素的背景顏色以十六進制
- 16. 閱讀單色位圖像素顏色
- 17. 生成所有顏色的十六進制值的代碼
- 18. iPhone:如何獲取圖像的每個像素的顏色?
- 19. 將十六進制顏色代碼轉換爲顏色名稱
- 20. 十六進制顏色到rgb顏色不準確?
- 21. 將十六進制顏色字符串轉換爲RGB顏色
- 22. 從十六進制顏色代碼中找到顏色名稱
- 23. 將十六進制顏色代碼作爲gridview背景顏色
- 24. 轉換UINT顏色ARGB十六進制顏色KML
- 25. 從十六進制字符串顏色到RGB顏色
- 26. 顯示十六進制顏色由SASS
- 27. Firefox十六進制顏色渲染
- 28. php str_replace十六進制顏色
- 29. 十六進制網頁顏色
- 30. 解析十六進制'0x0976b8'顏色android
做什麼? 'long color = pixelmap [pixel]; std :: cout << std :: hex << color;' – user3811082
@ user3811082如何將圖像加載到C++? – owenizedd
@ user3811082我想知道每個像素整個圖像的十六進制值 – owenizedd