OpenCV Laplacian算子提取轮廓并拟合圆

本文将介绍如何使用Laplacian算子提取图像轮廓,并使用霍夫变换拟合圆形。

步骤:

  1. 读取图像并转换为灰度图像: 使用OpenCV的imread函数读取图像,并使用cvtColor函数将其转换为灰度图像。
  2. 高斯滤波: 使用GaussianBlur函数对灰度图像进行高斯滤波,以减少噪声对边缘检测的影响。
  3. Laplacian边缘检测: 使用Laplacian函数对滤波后的图像进行边缘检测。
  4. 二值化处理: 使用threshold函数对边缘图像进行二值化处理,将边缘部分设置为白色,背景部分设置为黑色。
  5. 霍夫变换检测圆: 使用HoughCircles函数对二值化图像进行霍夫变换,检测图像中的圆。
  6. 绘制结果: 使用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函数的参数需要根据图像中圆的大小和数量进行调整,param1param2分别控制Canny边缘检测器和霍夫变换的灵敏度,minRadiusmaxRadius分别设置检测圆的最小和最大半径。

注意:

  • 该代码示例仅适用于具有明显轮廓和圆形的图像。
  • 对于复杂的图像,可能需要根据具体情况调整参数和处理步骤。
OpenCV Laplacian算子提取轮廓并拟合圆

原文地址: https://www.cveoy.top/t/topic/f3SC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录