我们已经有了RGB颜色空间,为什么还要去用其它的颜色空间
RGB空间很容易理解,但是当如果你需要去定义一个特定范围的颜色,定义一个颜色的准确的色度是不直观的。HSV颜色空间在定义一个特定的颜色的方面上更加直观,但是HSV对于表示人类看和解释颜色的方面不是很好。于是我们就有了L*a*b颜色空间,这个颜色空间试图去模仿人类观察和解释颜色的方法,在L*a*b颜色空间里面任意两个颜色的欧式距离有着实际的感知的意义
The addition of the perceptual meaning property makes the L*a*b* color space less intuitive and easy to understand than RGB or HSV, but because of the perceptual meaning property, we often use it in computer vision.
用L*a*b颜色空间和K-means聚集算法来寻找一张图片中的dominant colors
argparse是一个用于解析命令的库,ap.add_argument的设定命令里面 -i 和 -c -i后面的内容存在args这个map里面image对应的值,-c后面的内容存在args这个map里面clusters对应的值
py运行的命令和args里面的内容 接着读图像并且显示出来把(image.shape[0],image.shape[1],3)的图像reshape成 (image.shape[0] * image.shape[1], 3)的一维数组
KMeans 是无监督学习的方法:https://blog.csdn.net/u013850277/article/details/88411966
utils是项目目录中的utils.py
centroid_histogram函数的实现sklearn里面KMeans的说明:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#examples-using-sklearn-cluster-kmeans]
KMeans返回的对象里面有labels_ 和 cluster_centers_变量,labels就是每个元素所属类的标号
numLabels 是形成整数数组 0,1,...,clt.lablels_的不同种类的个数
numpy的histogram函数:https://blog.csdn.net/yangwangnndd/article/details/89489946
https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html
后面要将histogram里面的数 规范化 使得里面的所有数加起来为1(为啥鸭??)
看到后面的plot_colors就明白了,规范化的目的是把出现的数量转化成概率,感觉直接在histogram函数里面加上density = True就可以了
bar就是形成一个50*300的图,然后根据hist里面每个数据的出现概率和数据所代表的类centroids(其实质心就是颜色)
因为这个图里面的颜色很均一 所以质心其实就是这个颜色
endX 根据数据出现的比例 来画图
https://www.pyimagesearch.com/2014/05/26/opencv-python-k-means-color-clustering/ 里面有作者的解释
吐槽一下 这个代码跟L*a*b 感觉没有一毛钱关系啊!!!
改一下命令行的参数 康一康 如果将类的个数设置成2
感觉白色黄色红色 混一起了类的个数设置成4:
白色和黄色就明显区分出来了 感觉这个算法跟找dominant的意图是相悖的,如果K的设置不对 那么就凉凉把K = 3的时候 质心的位置打印一下:
运行多次 质心坐标不变,但是顺序可能会变我想自己试试转成LAB来进行KMeans
红线这个部分报错 太naive了貌似(1,1,3)的单个像素是不能进行转化的
网友评论