1.霍夫线检测
1.1 API:
cv.HoughLines(img, rho, theta, threshold)
参数:
- img:检测的图像,要求是二值化的图像,所以在调用霍夫变换之前首先要进行二值化,或者进行Canny边缘检测
- rho、theta:精确度
- threshold:阈值,只有累加器中的值高于该阈值时才被认为是直线。
1.2 示例:
import numpy as np
import random
import cv2 as cv
import matplotlib.pyplot as plt
#1.加载图片,转为二值图
img = cv.imread('images/rili.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray, 50, 150)
#2.霍夫直线变换
lines = cv.HoughLines(edges, 0.8, np.pi / 180, 150)
#3.将检测的线绘制在图像上(注意是极坐标噢)
for line in lines:
rho, theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0=a * rho
y0=b * rho
x1 = int(x0+1000*(-b))
y1 = int(y0+1000*a)
x2 = int(x0-1000*(-b))
y2 = int(y0-1000*a)
cv.line(img, (x1, y1), (x2, y2), (0, 255, 0))
#4.图像显示
plt.figure(figsize=(10, 8), dpi=100)
plt.imshow(img[:, :, ::-1]), plt.title('霍夫变换线检测')
plt.xticks([]), plt.yticks([])
plt.show()
2.霍夫圆检测
2.1 API
在OpenCV中检测图像中的圆环使用的是API是:
v.HoughCircles(image, method, dp, minDist, paraml=100, param2=100, minRadius=0,maxRadius=0
参数:
- image:输入图像,应输入灰度图像
- method:使用霍夫变换圆检测的算法,它的参数是CV_HOUGH_GRADIENT
- dp:霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致,dp=2时霍夫空间是输入图像空间的一半,以此类推minDist为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心
- param1:边缘检测时使用Canny算子的高阈值,低阈值是高阈值的一半。
- param2:检测圆心和确定半径时所共有的阈值minRadius和maxRadius为所检测到的圆半径的最小值和最大值
返回:
- circles:输出圆向量,包括三个浮点型的元素一一圆心横坐标,圆心纵坐标和圆半径
3.总结:
1.模板匹配
原理:在给定的图片中查找和模板最相似的区域
API:利用cv.matchTemplate0进行模板匹配,然后使用cv.minMaxLoc0搜索最匹配的位置。
2.霍夫线检测
原理:将要检测的内容转换到霍夫空间中,利用累加器统计最优解,将检测结果表示处理
API: cv2.HoughLines
注意:该方法输入是的二值化图像,在进行检测前要将图像进行二值化处理
3.霍夫圆检测
方法:霍夫梯度法