----------欢迎加入学习交流QQ群:657341423
直线检测
cv2.HoughLinesP()函数原型:
HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, maxLineGap=None)
示例一
import cv2
import numpy as np
img = cv2.imread('lines.jpg')
# 灰度处理
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# canny边缘处理
edges = cv2.Canny(gray,50,120)
line = 100
minLineLength = 20
# HoughLinesP函数是概率直线检测,注意区分HoughLines函数
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, lines=line, minLineLength=minLineLength)
# 降维处理
lines1 = lines[:,0,:]
# line 函数勾画直线
# (x1,y1),(x2,y2)坐标位置
# (0,255,0)设置BGR通道颜色
# 2 是设置颜色粗浅度
for x1,y1,x2,y2 in lines1:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
# 显示图像
cv2.imshow("edges", edges)
cv2.imshow("lines", img)
cv2.waitKey()
cv2.destroyAllWindows()
直线的识别与HoughLinesP函数参数的设置有关
圆检测
HoughCircles函数原型
cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
参数说明:
示例二
import cv2
import numpy as np
planets = cv2.imread('planet_glow.jpg')
# 灰度处理
gray_img = cv2.cvtColor(planets, cv2.COLOR_BGR2GRAY)
# medianBlur 平滑(模糊)处理
img = cv2.medianBlur(gray_img, 5)
# 灰度图像转彩色图像
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
# 圆检测
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 100, param1=100, param2=30, minRadius=50, maxRadius=100)
# 转化整数
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# 勾画圆形,planets图像、(i[0],i[1])圆心坐标,i[2]是半径
cv2.circle(planets,(i[0],i[1]),i[2],(0,255,0),2)
# 勾画圆心,圆心实质也是一个半径为2的圆形
cv2.circle(planets,(i[0],i[1]),2,(0,0,255),3)
# 显示图像
cv2.imwrite("planets_circles.jpg", planets)
cv2.imshow("mypic", cimg)
cv2.imshow("HoughCirlces", planets)
cv2.waitKey()
cv2.destroyAllWindows()
原图
效果图
圆的识别与HoughCircles函数参数的设置有关
注意:
例子可参考:Python 使用Opencv实现边缘检测以及轮廓检测的示例二
参考资料:OpenCV 3计算机视觉 Python语言实现第二版