计算一张图片的色系,用c++写出代码
时间: 2023-06-25 16:03:36 浏览: 64
计算图片的色系可以使用直方图统计各个像素值的频率,进而得到图片的色系。下面是一个简单的C++代码实现,使用OpenCV库读取图片并计算色系:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图片
Mat image = imread("test.jpg", IMREAD_COLOR);
// 计算直方图
Mat hist;
int channels[] = {0, 1, 2};
int histSize[] = {256, 256, 256};
float range[] = {0, 256};
const float* ranges[] = {range, range, range};
calcHist(&image, 1, channels, Mat(), hist, 3, histSize, ranges);
// 输出色系
cout << "Color Palette: " << endl;
for (int i = 0; i < 256; i += 15) {
for (int j = 0; j < 256; j += 30) {
for (int k = 0; k < 256; k += 60) {
int b = cvRound(hist.at<float>(i, j, k));
if (b > 0) {
cout << "(" << i << "," << j << "," << k << ")" << ": " << b << endl;
}
}
}
}
return 0;
}
```
这个代码使用了`calcHist`函数计算RGB三个通道的直方图,并输出色系。其中,使用`cvRound`将浮点数四舍五入为整数。