窝牛号

用于相似图片搜索引擎的Python OpenCV图像直方图

图像直方图

那么,图像直方图到底是什么?

图片

图像的构成是由像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图)。所谓直方图就是对图像的中的这些像素点的值进行统计,得到一个统一的整体的灰度概念。直方图表示图像中颜色的分布。可以将其可视化为图表(或曲线图),以直观地了解强度(像素值)分布。直方图的好处就在于可以清晰了解图像的整体灰度分布,这对于计算机视觉处理图片有关重要。

一般情况下直方图都是灰度图像,直方图x轴是灰度值(一般0~255),y轴就是图像中每一个灰度级对应的像素点的个数。

灰度空间图片直方图

如何获取图片直方图

图片直方图的获取,opencv已经帮我们集成了函数,当然numpy也同样可以 获取

from matplotlib import pyplot as plt import numpy as np import cv2 image = cv2.imread(&34;) img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) hist = cv2.calcHist([img], [0], None, [256], [0, 256]) hist_np,bins = np.histogram(img.ravel(),256,[0,256]) hist_np1 = np.bincount(img.ravel(),minlength=256) cv2.imshow(&34;, img) plt.figure() plt.title(&34;) plt.xlabel(&34;) plt.ylabel(& of Pixels&34;1.jpg&34;image&34;b&34;g&34;r&34;&39; Color Histogram&34;Bins&34;34;) features = [] for (chan, color) in zip(chans, colors): hist = cv2.calcHist([chan], [0], None, [256], [0, 256]) features.extend(hist) plt.plot(hist, color = color) plt.xlim([0, 256]) plt.show()

代码截图

chans = cv2.split(image)函数把图片分别分割成 R G B 三色空间

分别把三色空间的 R G B 空间传入cv2.calcHist([chan], [0], None, [256], [0, 256])函数来生成不同空间内的颜色图片直方图,最后把图片显示出来

图片mask参数

cv2.calcHist函数可以接受mask 来进行图片直方图的显示,默认计算图片的所有区域,但是有时候我们不需要图片的所有区域,我们可以使用mask来扣自己需要的图片区域,进而可以进行自己想要图片区域的直方图

mask 图片直方图

from matplotlib import pyplot as plt import numpy as np import cv2 image = cv2.imread(&34;) img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) mask = np.zeros(img.shape[:2],np.uint8) mask[100:500,100:500] = 255 mask_img = cv2.bitwise_and(img,img,mask=mask) hist = cv2.calcHist([img], [0], mask, [256], [0, 256]) cv2.imshow(&34;, mask_img) plt.figure() plt.title(&34;) plt.xlabel(&34;) plt.ylabel(& of Pixels&34;1.jpg&39;img&39;res&34;1.jpg&res = cv2.equalizeHist(img) cla = cv2.createCLAHE(clipLimit=2,tileGridSize=(10,10)) res = cla.apply(img) cv2.imshow(&39;,img) cv2.imshow(&39;,res) cv2.waitKey(0)

代码截图

总结

图片直方图在相识图片搜索引擎中起到了至关重要的作用,如何使用图片直方图来进行相识图片的搜索,我们下期分享,帮你打造一款属于自己的相识图片搜索引擎。

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1