摘要:理论可以将直方图视为图形或绘图,它可以从中全面了解图像的强度分布它是在轴上具有像素值范围从到,并非总是的图和在轴上的图像中的对应像素数查找直方图像素值区间的像素数例如将整个直方图分成个子部分,每个子部分的值是其中所有像素数的总和,每个子部
Histograms - 1 : Find, Plot, Analyze !!!
理论可以将直方图视为图形或绘图,它可以从中全面了解图像的强度分布. 它是在X轴上具有像素值(范围从0到255,并非总是)的图和在Y轴上的图像中的对应像素数.
查找直方图BINS:像素值区间的像素数.例如将整个直方图分成16个子部分,每个子部分的值是其中所有像素数的总和,每个子部分称为“BIN”.
DIMS:收集数据的参数数量,在这种情况下,我们只收集有关一件事,强度值的数据,所以这里是1.
RANGE :要测量的强度值范围.通常,它是[0,256],即所有强度值.
1 OpenCV中的直方图计算cv.calcHist(images,channels,mask,histSize,ranges [,hist [,accumulate]])
images:它是uint8或float32类型的源图像。它应该用方括号表示,即“[img]”;
channels:它也在方括号中给出.它是我们计算直方图的通道索引.例如,如果输入是灰度图像,则其值为[0].对于彩色图像,您可以通过[0],[1]或[2]分别计算蓝色,绿色或红色通道的直方图.
mask:蒙版图像.要查找完整图像的直方图,它将显示为“无”.但是,如果要查找图像特定区域的直方图,则必须为其创建蒙版图像并将其作为蒙版.
histSize:这代表我们的BIN计数.需要在方括号中给出.对于满量程,我们通过[256].
ranges:这是我们的范围。通常,它是[0,256].
代码:
import cv2 import numpy as np img = cv2.imread("img.jpg") hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist是256x1数组,每个值对应于该图像中具有相应像素值的像素数
2 Numpy中的直方图计算hist,bins = np.histogram(img.ravel(),256,[0,256])
hist与我们之前计算的相同. 但是bins将有257个元素,因为Numpy计算bins为0-0.99,1-1.99,2-2.99等.所以最终范围是255-255.99. 为了表示这一点,他们还在箱柜末尾添加256. 但我们不需要256.高达255就足够了.
Numpy还有另一个函数np.bincount(),它比(大约10倍)np.histogram()快得多。 因此,对于一维直方图,您可以更好地尝试. 不要忘记在np.bincount中设置minlength = 256.
例如,hist = np.bincount(img.ravel(),minlength = 256)
Note:OpenCV函数比np.histogram()快(大约40倍)
绘制直方图 1 使用MatplotlibMatplotlib附带直方图绘图功能:matplotlib.pyplot.hist()
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg",0) plt.hist(img.ravel(),256,[0,256]) plt.show()
原图:
直方图:
或者可以使用matplotlib的正常图,这对BGR图有好处.需要首先找到直方图数据.
代码:
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg") color = ("b","g","r") for i,col in enumerate(color): histr = cv2.calcHist([img],[i],None,[256],[0,256]) plt.plot(histr,color = col) plt.xlim([0,256]) plt.show()掩模的应用
我们使用cv.calcHist()来查找完整图像的直方图. 如果要查找图像某些区域的直方图, 只需在要查找直方图的区域上创建一个白色的蒙版图像,否则创建黑色. 然后将其作为掩模传递.
代码:
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread("img.jpg",0) # create a mask mask = np.zeros(img.shape[:2], np.uint8) mask[100:300, 100:400] = 255 masked_img = cv2.bitwise_and(img,img,mask = mask) # Calculate histogram with mask and without mask # Check third argument for mask hist_full = cv2.calcHist([img],[0],None,[256],[0,256]) hist_mask = cv2.calcHist([img],[0],mask,[256],[0,256]) plt.subplot(221), plt.imshow(img, "gray") plt.subplot(222), plt.imshow(mask,"gray") plt.subplot(223), plt.imshow(masked_img, "gray") plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask) plt.xlim([0,256]) plt.show()
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/42019.html
Histograms - 3 : 2D Histograms 我们已经计算并绘制了一维直方图,因为我们只考虑一个特征,即像素的灰度强度值.但在二维直方图中,需要考虑两个特征,通常,它用于查找颜色直方图,其中两个要素是每个像素的色调和饱和度值. OpenCV中的2D直方图 使用函数cv.calcHist(), 对于颜色直方图,我们需要将图像从BGR转换为HSV。 (请记住,对于1D直方图,我们从B...
摘要:如果噪音在那里,它就会被放大为了避免这种情况,会应用对比限制如果任何直方图超出指定的对比度限制默认情况下是,在应用直方图均衡之前,这些像素被裁剪并均匀地分布到其他均衡后,删除边界中的工件,采用双线性插值代码 Histograms - 2: Histogram Equalization 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法.通过这种方法,亮度可以更好地在直方...
摘要:理论直方图反向投影用于图像分割或查找图像中感兴趣的对象简单来说,它会创建一个与输入图像大小相同单个通道的图像其中每个像素对应于属于我们对象该像素的概率输出图像将使我们感兴趣的对象比其余部分更明显首先,我们创建一个包含我们感兴趣对象的图像的 Histogram - 4 : Histogram Backprojection 理论 直方图反向投影用于图像分割或查找图像中感兴趣的对象,简单来...
阅读 1811·2021-09-22 15:23
阅读 3188·2021-09-04 16:45
阅读 1719·2021-07-29 14:49
阅读 2746·2019-08-30 15:44
阅读 1502·2019-08-29 16:36
阅读 1017·2019-08-29 11:03
阅读 1471·2019-08-26 13:53
阅读 480·2019-08-26 11:57