1 圆检测
import cv2
import numpy as np
image=cv2.imread("D:/desktop/workspace/picture/02.jpg")
planets = image
gray_img = cv2.cvtColor(planets, cv2.COLOR_BGR2GRAY)
# medianBlur 平滑(模糊)处理
img = cv2.medianBlur(gray_img, 5)
#cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
# 圆检测02.jpg
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 80, param1=130, param2=35, minRadius=20, maxRadius=65)
#03.png
#circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 100, param1=100, param2=30, minRadius=50, maxRadius=100)
#04.png
#GaussianBlur处理
#img = cv2.GaussianBlur(gray_img, (19,19), 2)
#circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 100, param1=100, param2=20, minRadius=20, 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("D:/desktop/workspace/picture/0201.jpg", planets)
cv2.imshow("HoughCirlces", planets)
cv2.waitKey()
结果:
2 直线检测
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread('D:/desktop/workspace/picture/01.jpg')
gray1 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#直方图均衡化
gray= cv2.equalizeHist(gray1)
#img = cv2.medianBlur(gray,9)
#高斯滤波处理
img = cv2.GaussianBlur(gray, (19,19), 2)
#canny算子
edges = cv2.Canny(img, 60, 100)
#闭运算使线条明显
result = cv2.morphologyEx(edges,cv2.MORPH_CLOSE,kernel=(9,9),iterations=1)
#二值处理
#ret, Binary=cv2.threshold(result, 90,255,cv2.THRESH_BINARY)
#设置卷积核
#kernel = np.ones((3,3), np.uint8)
#图像膨胀处理
#erosion = cv2.dilate(edges, kernel)
#霍夫变换
lines = cv2.HoughLinesP(result, 1, np.pi / 180, 65, minLineLength=50, maxLineGap=4)
lines1 = lines[:, 0, :]
for x1, y1, x2, y2 in lines1[:]:
cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
#显示图像
cv2.imshow("lines",image)
#cv2.imshow("edges",edges)
cv2.imwrite("D:/desktop/workspace/picture/0101.jpg", image)
cv2.waitKey()