主要观点总结
本文主要介绍了一种基于OpenCV库实现的最基本的RGB色彩域的主颜色分析方法。
关键观点总结
关键观点1: 生成测试图片。
为了测试算法是否准确,主动生成具有25种不同颜色同比重的图片(每种颜色占比4%)的测试图片。
关键观点2: 读取图片数据并保存至3维数组。
通过创建BGR立方体,遍历图片的每个像素点,将出现过的颜色及其出现次数记录到数组中。
关键观点3: 对数组结果进行排序。
使用标准库的排序方法,根据颜色的出现次数进行排序。
关键观点4: 显示最后的结果。
显示排序后的前20种颜色及其占比,并展示在图像上。
关键观点5: 代码开源共享。
完整的代码被开源共享,欢迎交流和学习。
文章预览
一般来说,直接分析RGB色彩域的颜色分布不是一个好的思路,我们一般转换到HSV域来分析。但是本文只要是应网友提问,实现最基本的RGB 色彩域的主颜色分析。 代码分为以下部分: 1、生成测试图片。为了测试算法是否准确,主动生成 具有25种不同颜色同比重的图片(每种4%)的 测试图片。 ////创建具有25种不同颜色同比重的图片 Mat src = Mat( 250 , 250 ,CV_8UC3,Scalar( 0 )); //生成时间种子 time_t t;time( ); RNG rng (t) ; //创建图片 for ( int i = 0 ;i < 250 ;i+= 10 ) rectangle(src,Point( 0 ,i),Point(src.cols,i+ 9 ),Scalar(rng.uniform( 0 , 255 ),rng.uniform( 0 , 255 ),rng.uniform( 0 , 255 )), -1 ); imshow( "src" ,src); imwrite( "e:/template/maincolor.jpg" ,src); 生成的结果大概是这个样子的。 2、读取图片数据,保存到3维数组中去。 //bgr立方体 int *iTable = new int [ 256 , 25
………………………………