OpenCV Laplacian算子提取轮廓并拟合圆
OpenCV Laplacian算子提取轮廓并拟合圆
本文将介绍如何使用Laplacian算子提取图像轮廓,并使用霍夫变换拟合圆形。
步骤:
- 读取图像并转换为灰度图像: 使用OpenCV的
imread函数读取图像,并使用cvtColor函数将其转换为灰度图像。 - 高斯滤波: 使用
GaussianBlur函数对灰度图像进行高斯滤波,以减少噪声对边缘检测的影响。 - Laplacian边缘检测: 使用
Laplacian函数对滤波后的图像进行边缘检测。 - 二值化处理: 使用
threshold函数对边缘图像进行二值化处理,将边缘部分设置为白色,背景部分设置为黑色。 - 霍夫变换检测圆: 使用
HoughCircles函数对二值化图像进行霍夫变换,检测图像中的圆。 - 绘制结果: 使用
circle函数绘制检测到的圆,并使用imshow函数显示结果。
Python代码示例:
import cv2
import numpy as np
# 读取图像并转换为灰度图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 使用Laplacian算子进行边缘检测
laplacian = cv2.Laplacian(blur, cv2.CV_64F)
# 二值化处理
_, binary = cv2.threshold(laplacian, 30, 255, cv2.THRESH_BINARY)
# 使用霍夫变换检测圆
circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=0, maxRadius=0)
# 绘制检测到的圆
if circles is not None:
circles = np.uint16(np.around(circles))
for circle in circles[0, :]:
center = (circle[0], circle[1])
radius = circle[2]
cv2.circle(image, center, radius, (0, 255, 0), 2)
# 显示结果
cv2.imshow('Contours and Circle', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
参数调整建议:
GaussianBlur函数的核大小可以根据图像噪声水平进行调整。threshold函数的阈值可以根据图像对比度进行调整。HoughCircles函数的参数需要根据图像中圆的大小和数量进行调整,param1和param2分别控制Canny边缘检测器和霍夫变换的灵敏度,minRadius和maxRadius分别设置检测圆的最小和最大半径。
注意:
- 该代码示例仅适用于具有明显轮廓和圆形的图像。
- 对于复杂的图像,可能需要根据具体情况调整参数和处理步骤。
原文地址: https://www.cveoy.top/t/topic/f3SC 著作权归作者所有。请勿转载和采集!