筆記 :
海,我是 OpenCV 和 Stackoverflow 的新手。
我試圖通過使用 cv2.HoughCircles 作為我的方法檢測圓內的圓來獲得結果。
這是我已經嘗試過的簡單代碼:
import cv2
import numpy as np
pic= cv2.imread('septoria.jpg')
gray = cv2.cvtColor(pic,cv2.COLOR_BGR2GRAY)
_,thres = cv2.threshold(gray, 50,260, cv2.THRESH_TOZERO)
res = cv2.Canny(thres, 100, 200, L2gradient=True)
circles = cv2.HoughCircles(res,cv2.HOUGH_GRADIENT,1,20,param1=200,param2=25,minRadius=90,maxRadius=130)
for i in circles[0,:]:
i = i.astype(int)
crop = res[i[1]-i[2]:i[1] i[2], i[0]-i[2]:i[0] i[2]]
mask = np.zeros(crop.shape)
mask = cv2.circle(mask, (i[2], i[2]), i[2], (255, 255, 255), -1)
final_im = mask * crop
print(final_im.shape)
circles2 = cv2.HoughCircles(final_im,cv2.HOUGH_GRADIENT,1,20,param1=20,param2=5,minRadius=0,maxRadius=20)
for j in circles2[0,:]:
cv2.circle(final_im,(int(j[0]),int(j[1])),int(j[2]),(255,0,0),2)
cv2.imshow('Hole',final_im)
cv2.waitKey(0)
cv2.destroyAllWindows()
Final_im 回傳形狀 (206, 206)
并給出這樣的錯誤
error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-inblc7p7\opencv\modules\imgproc\src\hough.cpp:2253: error: (-215:Assertion failed) !_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat()) in function 'cv::HoughCircles'
編譯器說我在第 20 行有錯誤的代碼:
circles2 = cv2.HoughCircles(final_im,cv2.HOUGH_GRADIENT,1,20,param1=20,param2=5,minRadius=0,maxRadius=20)
誰能告訴我這里有什么問題,并告訴我如何解決它?
uj5u.com熱心網友回復:
Hough circles 需要有一個 unit8 影像作為輸入,如果您使用 來檢查 finaly_im 的型別final_im.dtype,它很可能是一個 float64 影像。
為了更改影像型別,您可以使用:
final_im = mask * crop
final_im = cv2.normalize(src=final_im, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
Hough Circles 檔案鏈接以獲取更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315310.html
