Opencv[七]——补充
直方图均衡化
1.绘制直方图
hist = cv2.calcHist(images,channels,mask,histSize,ranges)
images
:输入图像列表,可以是一幅或多幅图像(通常是灰度图像或者彩色图像的各个通道)。channels
:一个包含整数的列表,指示在每个图像上计算直方图的通道编号。如果输入图像是灰度图,它的值就是 [0];如果是彩色图像的话,传入的参数可以是 [0],[1],[2] 它们分别对应着通道 B,G,R。mask
(可选):一个与输入图像尺寸相同的二值掩模图像,其中非零元素标记了参与直方图计算的区域,None为全部计算。histSize
:一个整数列表,也就是直方图的区间个数(BIN 的数目)。用中括号括起来,例如:[256]。ranges
:每维数据的取值范围,它是一个二维列表,每一维对应一个通道的最小值和最大值,例如对灰度图像可能是[0, 256]
。
返回值hist 是一个长度为255的数组,数组中的每个值表示图像中对应灰度等级的像素计数
minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(hist)
获取直方图的最小值、最大值及其对应最小值的位置索引、最大值的位置索引
cv2.line(img,pt1,pt2,color,thickness)
2.直方图均衡化
一副效果好的图像通常在直方图上的分布比较均匀,直方图均衡化就是用来改善图像的全局亮度和对比度。
自适应直方图均值化:以255*占比
dst = cv.equalizeHist(imgGray)
对比度受限的自适应直方图均衡化:
<u>clahe = cv2.createCLAHE(clipLimit=None,tileFridSize=None)</u>
clipLimit(可选):对比度限制参数,用于控制直方图均衡化过程中对比度增强的程度。如果设置一个大于1的值(如2.0或4.0),CLAHE会限制对比度增强的最大程度,避免过度放大噪声。如果不设置,OpenCV会使用一个默认值。
tileGridSize(可选):图像分块的大小,通常是一个包含两个整数的元组,如
(8, 8)
,表示将图像划分成8x8的小块进行独立的直方图均衡化处理。分块大小的选择会影响到CLAHE的效果以及处理速度。
创建CLAHE对象后,可以使用 .apply()
方法对图像进行CLAHE处理:
img = clahe.apply(image)
模板匹配
res = cv2.matchTemplate(img,templ,method)
method:匹配方法,可以是以下之一:
越大越好:
cv2.TM_CCOEFF 相关系数匹配 (均值与像素之差的乘积求和)
cv2.TM_CCOEFF_NORMED 归一化相关系数匹配
cv2.TM_CCORR 相关匹配 (乘积)
cv2.TM_CCORR_NORMED 归一化相关匹配
越接近0越好:
cv2.TM_SQDIFF 平方差匹配
cv2.TM_SQDIFF_NORMED 归一化平方差匹配
由于matchTemplate返回是一个结果矩阵,与原图大小相同,每个元素表示匹配的相似度。
所以利用res进行绘图要先解包
绘制轮廓
loc = np.where(arr>0.8) # loc包含array中所有大于0.8的**元素索引**的数组
for pt in zip(*loc):right_bottom = (pt[1] + w, pt[0] + h)cv2.rectangle(image_np, pt[::-1], right_bottom, (0, 0, 255), 2)
霍夫变换
霍夫直线变换
lines = cv2.HoughLines(img,roh,theat,threshold)
统计概率霍夫直线变换
lines=cv2.HoughLinesP(img,rho,theta,threshold,lines=None,minLineLength=0,maxLineGap=0)
霍夫圆变换
circle = cv2.HoughCircles(img,method,dp,minDist,param1,param2)
image
:输入图像,通常是灰度图像。method
:使用的霍夫变换方法:霍夫梯度法,可以是cv2.HOUGH_GRADIENT
,这是唯一在OpenCV中用于圆检测的方法。dp
:累加器分辨率与输入图像分辨率之间的降采样比率,用于加速运算但不影响准确性。设置为1表示霍夫梯度法中累加器图像的分辨率与原图一致minDist
:检测到的圆心之间的最小允许距离,以像素为单位。在霍夫变换检测圆的过程中,可能会检测到许多潜在的圆心。minDist
参数就是为了过滤掉过于接近的圆检测结果,避免检测结果过于密集。当你设置一个较小的minDist
值时,算法会尝试找出尽可能多的圆,即使是彼此靠得很近的圆也可能都被检测出来。相反,当你设置一个较大的minDist
值时,算法会倾向于只检测那些彼此间存在一定距离的独立的圆。例如,如果你设置
minDist
很小,可能在真实图像中存在的一个大圆旁边的一些噪声点会被误判为多个小圆;而如果设置minDist
较大,则可以排除这种情况,只保留明显分离的圆的检测结果。param1
和param2
:这两个参数是在使用cv2.HOUGH_GRADIENT
方法时的特定参数,分别为:param1
(可选):阈值1,决定边缘强度的阈值。param2
:阈值2,控制圆心识别的精确度。较大的该值会使得检测更严格的圆。param2
通常被称为圆心累积概率的阈值。在使用霍夫梯度方法时,param2
设置的是累加器阈值,它决定了哪些候选圆点集合被认为是有效的圆。较高的param2
值意味着对圆的检测更严格,只有在累加器中积累了足够高的响应值才认为是真实的圆;较低的param2
值则会降低检测的门槛,可能会检测到更多潜在的圆,但也可能包含更多的误检结果。举个例子,如果你将
param2
设置得较高,那么算法只会返回那些边缘强烈符合圆形特征且周围有足够的支持像素的圆;而如果设置得较低,即使边缘特征不是很强烈,只要有一些证据支持就可能将其视为一个圆。
返回值:cv2.HoughCircles
返回一个二维numpy数组,包含了所有满足条件的圆的参数。
图片亮度变换
1.线性变换
cv2.addWeighted(src1, alpha, src2, beta, gamma)
2.直接像素修改
numpy.clip(a, a_min, a_max)