霍夫变换圆检测和直线检测

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()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值