python opencv之 Hough圓變換

2021-08-28 10:21:30 字數 2813 閱讀 1387

內容來自opencv-python tutorials 自己翻譯整理

目標:

使用霍夫變換在影象中尋找圓

使用函式cv2.houghcircles()

原理:

圓形的表示式為(x−xcenter)2+(y−ycenter)2=r2(x−xcenter)2+(y−ycenter)2=r2,乙個圓環的確定需要三個引數。那麼霍夫變換的累加器必須是三維的,但是這樣的計算效率很低。

這裡opencv中使用霍夫梯度的方法,這裡利用了邊界的梯度資訊。

首先對影象進行canny邊緣檢測,對邊緣中的每乙個非0點,通過sobel演算法計算區域性梯度。那麼計算得到的梯度方向,實際上就是圓切線的法線。三條法線即可確定乙個圓心,同理在累加器中對圓心通過的法線進行累加,就得到了圓環的判定。

cv2.houghcircles函式的引數

cv2.houghcircles(image, method, dp, mindist, circles, param1, param2, minradius, maxradius)
源**

print('圓心座標:', i[0], i[1])

print('圓半徑:', i[2])

cv2.destroyallwindows()在給乙個使用攝像頭進行尋找圓 的**

import cv2

import numpy as np

def circle(image):

img = cv2.medianblur(image, 5)

cimg = cv2.cvtcolor(img, cv2.color_bgr2gray)

print('the shape of cimg: ', cimg.shape)

# circles = cv2.houghcircles(img,cv2.hough_gradient,1,100,

# param1=100,param2=30,minradius=40, maxradius=70)

circles = cv2.houghcircles(cimg, cv2.hough_gradient, 1, 100,

param1=100, param2=30, minradius=40, maxradius=100)

# print('circles: ', circles)

if circles is none:

return image

circles = np.uint16(np.around(circles))

for i in circles[0,:]:

# draw the outer circle

image1 = cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)

print('圓心座標:', i[0], i[1])

print('圓心半徑:', i[2])

# draw the center of the circle

images = cv2.circle(image1, (i[0], i[1]), 2, (0, 0, 255), 3)

return images

if __name__ == '__main__':

cap = cv2.videocapture(0)

cap.set(3, 960)

cap.set(4, 960)

while(1):

# get a frame

ret, frame = cap.read()

if not ret:

print('video read error')

frame = circle(frame)

# show a frame

cv2.imshow("capture", frame)

print('hi')

if cv2.waitkey(1) & 0xff == ord('q'):

break

cap.release()

cv2.destroyallwindows()

Python OpenCV之模板匹配

模板匹配 模板匹配和卷積原理很像,模板在原影象上從原點開始滑動,計算模板與當前圖形被模板覆蓋的地方的差別程度,然後將每次計算的結果放入乙個矩陣,作為結果輸出。假如原圖形是a b大小,而模板是a b大小,則輸出結果的矩陣是 a a 1 b b 1 用於搜尋的輸入影象 template 用於匹配的模板 ...

python OpenCV之numpy陣列操作

1.的表示與儲存 以矩陣的形式存在電腦裡,需要用到陣列操作來完成對影象的處理。np.ones size 可以建立任意維度的陣列,各個元素值均為1 23 np.zeros size,dtype 同上,但各個元素值為0.預設元素型別為浮點數使用示例 img np.zeros 256 256,3 np.u...

python OpenCV之對比度增強

對比度指的是一幅影象中明暗區域最亮的白和最暗的黑之間不同亮度層級的測量,差異範圍越大代表對比越大,差異範圍越小代表對比越小。對比度增強技術主要解決影象灰度級範圍較小造成的對比度低問題,目的是將影象的灰度級放大到指定的程度,使影象中的細節看起來更加清晰。概念 灰度直方圖是影象灰度級的函式,用來描述每個...