簡體   English   中英

使用霍夫變換檢測圓

[英]Detecting circle using hough transformation

我試圖檢測給定圖像中的硬幣以繪制垂直線或將落在同一直線下的硬幣分組。

import cv2
from PIL import Image
import numpy as np

import matplotlib.pyplot as plt
img = Image.open("coin.jpg")
imgUMat = np.float32(img)
gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
#plt.imshow(img)
#gray = (np.float32(imgUMat), cv2.COLOR_RGB2GRAY)
#gray = cv2.cvtColor(cv2.UMat(img), cv2.COLOR_RGB2GRAY)
#gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.resize(gray,None,fx=0.25, fy=0.25, interpolation = cv2.INTER_CUBIC)

img = cv2.medianBlur(gray,1)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20,
              param1=30,
              param2=15,
              minRadius=0,
              maxRadius=0)
#circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=1)
if (circles!=None):
    i = np.uint16(np.around(circles))
    cv2.circle(gray,(i[0,0,0],i[0,0,1]),i[0,0,2],(255,255,255),1)
    cv2.circle(gray,(i[0,0,0],i[0,0,1]),1,(255,255,255),1)
    center_x.append(i[0,0,0])
    center_y.append(i[0,0,1])

當我運行代碼時,我在 circles 變量處得到一個錯誤,說,

錯誤:OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\hough.cpp:1728: error: (-215:Assertion failed)._image.empty() && _image.type () == CV_8UC1 && (_image.isMat() || _image:isUMat()) 在 function 'cv::HoughCircles'

您可以嘗試使用 opencv 而不是 pil 來讀取圖像。

它看起來像這樣:

import cv2
import numpy as np

gray = cv2.imread('coin.png', 0) # The zero reads the image in gray scale
gray = cv2.resize(gray,None,fx=0.25, fy=0.25, interpolation = cv2.INTER_CUBIC)

img = cv2.medianBlur(gray,1)
img = cv2.medianBlur(gray,1)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20,
              param1=30,
              param2=15,
              minRadius=0,
              maxRadius=0)

print (circles)

我不確定您想在 if 語句中做什么。 但我認為你也應該改變它,因為 center_x 和 center_y 沒有定義。 HoughCircles 還將返回一個 Numpy 數組,因此您不能使用!= None我認為這會更好。

center_x, center_y = [], []
if (len(circles) > 0):
    i = np.uint16(np.around(circles))
    cv2.circle(gray,(i[0,0,0],i[0,0,1]),i[0,0,2],(255,255,255),1)
    cv2.circle(gray,(i[0,0,0],i[0,0,1]),1,(255,255,255),1)
    center_x.append(i[0,0,0])
    center_y.append(i[0,0,1])

看起來你的圖像是空的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM