python+Opencv 圓檢測

霍夫圓變換原理

1、從平面座標到極座標轉換是三個參數從C(x0,y0,r)其中x0,y0是圓心

2、假設平面座標的任意一個圓上的點,轉換到極座標中:C(x0,y0,r)處有最大值,霍夫變換正是利用這個原理實現元的檢測。

(上面的一段話,個人不是很理解,先記下來,慢慢理解。)

 

現實考量:

1、因爲霍夫圓檢測對噪聲比較敏感,所以首先要對圖像做中值濾波。

2、基於效率考慮,OpenCV中實現的霍夫變換圓檢測是基於圖像梯度的實現,分爲兩步

a、檢測邊緣,發現可能的圓心

b、基於第一步的基礎上從候選圓心畫圓。

import cv2 as cv
import numpy as np


def detect_circle_demo(image):
    # 中值濾波
    dst = cv.pyrMeanShiftFiltering(image, 10, 100)
    # 灰度轉換
    cimage = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)
    # param1、param2分別是高低閾值
    circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        # 繪製圓
        cv.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)
        # 繪製圓心
        cv.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2)
    cv.imshow('circles', image)


src = cv.imread('C:/Users/Y/Pictures/Saved Pictures/coins.jpg')
cv.namedWindow('input image', cv.WINDOW_AUTOSIZE)
cv.imshow('input image', src)
detect_circle_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章