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


使用cv2.bitwise_and 函数把原来图片中的需要的局部区域提取出来,我们可以show一下,看看是否是自己需要的区域
有了mask的区域,使用cv2.calcHist([img], [0], mask, [256], [0, 256])函数,传递mask 参数,进而可以实现mask图片的直方图显示 。
图片直方图均衡化这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候 。通过这种方法,亮度可以更好地在直方图上分布 。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能 。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节 。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大 。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度 。

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

文章插图
图片直方图均衡化
有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布 。
直方图均衡化包括三个步骤:
  1. 统计直方图中每个灰度级出现的次数;
  2. 计算累计归一化直方图;
  3. 重新计算像素点的像素值;
from matplotlib import pyplot as pltimport numpy as npimport cv2image = cv2.imread("1.jpg")img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)res = cv2.equalizeHist(img)cv2.imshow('img',img)cv2.imshow('res',res)cv2.waitKey(0)
用于相似图片搜索引擎的Python OpenCV图像直方图

文章插图
代码截图
opencv 使用此函数res = cv2.equalizeHist(img),对图片进行均衡化进行处理,此函数是opencv全局化操作,这个操作在我们需要局部调整时不太适用,同理mask参数,opencv存在一种局部化处理的函数cv2.createCLAHE(),此函数接受一个局部尺寸参数数据
用于相似图片搜索引擎的Python OpenCV图像直方图

文章插图
局部化处理
from matplotlib import pyplot as pltimport numpy as npimport cv2image = cv2.imread("1.jpg")img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#res = cv2.equalizeHist(img)cla = cv2.createCLAHE(clipLimit=2,tileGridSize=(10,10))res = cla.Apply(img)cv2.imshow('img',img)cv2.imshow('res',res)cv2.waitKey(0)
用于相似图片搜索引擎的Python OpenCV图像直方图

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




推荐阅读