日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python+OpenCV图像处理(十五)—— 圆检测

發(fā)布時間:2025/3/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python+OpenCV图像处理(十五)—— 圆检测 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介:

1.霍夫圓變換的基本原理和霍夫線變換原理類似,只是點對應的二維極徑、極角空間被三維的圓心和半徑空間取代。在標準霍夫圓變換中,原圖像的邊緣圖像的任意點對應的經(jīng)過這個點的所有可能圓在三維空間用圓心和半徑這三個參數(shù)來表示,其對應一條三維空間的曲線。對于多個邊緣點,點越多,這些點對應的三維空間曲線交于一點的數(shù)量越多,那么他們經(jīng)過的共同圓上的點就越多,類似的我們也就可以用同樣的閾值的方法來判斷一個圓是否被檢測到,這就是標準霍夫圓變換的原理, 但也正是在三維空間的計算量大大增加的原因,標準霍夫圓變化很難被應用到實際中。

2.OpenCV實現(xiàn)的是一個比標準霍夫圓變換更為靈活的檢測方法——霍夫梯度法,該方法運算量相對于標準霍夫圓變換大大減少。其檢測原理是依據(jù)圓心一定是在圓上的每個點的模向量上,這些圓上點模向量的交點就是圓心,霍夫梯度法的第一步就是找到這些圓心,這樣三維的累加平面就又轉(zhuǎn)化為二維累加平面。第二步是根據(jù)所有候選中心的邊緣非0像素對其的支持程度來確定半徑。注:模向量即是圓上點的切線的垂直線。

霍夫圓檢測原理參考:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html

https://blog.csdn.net/dcrmg/article/details/52506538

代碼如下:

#霍夫圓檢測 import cv2 as cv import numpy as npdef detect_circles_demo(image):dst = cv.pyrMeanShiftFiltering(image, 10, 100) #邊緣保留濾波EPFcimage = cv.cvtColor(dst, cv.COLOR_RGB2GRAY)circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)circles = np.uint16(np.around(circles)) #把circles包含的圓心和半徑的值變成整數(shù)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, (0, 0, 255), 2) #畫圓心cv.imshow("circles", image)src = cv.imread('E:/imageload/coins.jpg') cv.namedWindow('input_image', cv.WINDOW_NORMAL) #設置為WINDOW_NORMAL可以任意縮放 cv.imshow('input_image', src) detect_circles_demo(src) cv.waitKey(0) cv.destroyAllWindows()

運行結(jié)果:

?注意:

1.OpenCV的霍夫圓變換函數(shù)原型為:HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles

image參數(shù)表示8位單通道灰度輸入圖像矩陣。

method參數(shù)表示圓檢測方法,目前唯一實現(xiàn)的方法是HOUGH_GRADIENT。

dp參數(shù)表示累加器與原始圖像相比的分辨率的反比參數(shù)。例如,如果dp = 1,則累加器具有與輸入圖像相同的分辨率。如果dp=2,累加器分辨率是元素圖像的一半,寬度和高度也縮減為原來的一半。

minDist參數(shù)表示檢測到的兩個圓心之間的最小距離。如果參數(shù)太小,除了真實的一個圓圈之外,可能錯誤地檢測到多個相鄰的圓圈。如果太大,可能會遺漏一些圓圈。

circles參數(shù)表示檢測到的圓的輸出向量,向量內(nèi)第一個元素是圓的橫坐標,第二個是縱坐標,第三個是半徑大小。

param1參數(shù)表示Canny邊緣檢測的高閾值,低閾值會被自動置為高閾值的一半。

param2參數(shù)表示圓心檢測的累加閾值,參數(shù)值越小,可以檢測越多的假圓圈,但返回的是與較大累加器值對應的圓圈。

minRadius參數(shù)表示檢測到的圓的最小半徑。

maxRadius參數(shù)表示檢測到的圓的最大半徑。

2.OpenCV畫圓的circle函數(shù)原型:circle(img, center, radius, color[, thickness[, lineType[, shift]]]) -> img

img參數(shù)表示源圖像。

center參數(shù)表示圓心坐標。

radius參數(shù)表示圓的半徑。

color參數(shù)表示設定圓的顏色。

thickness參數(shù):如果是正數(shù),表示圓輪廓的粗細程度。如果是負數(shù),表示要繪制實心圓。

lineType參數(shù)表示圓線條的類型。

shift參數(shù)表示圓心坐標和半徑值中的小數(shù)位數(shù)。

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/FHC1994/p/9386783.html

總結(jié)

以上是生活随笔為你收集整理的Python+OpenCV图像处理(十五)—— 圆检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。