cv2.HoughCircles

时间:2018-12-13 16:31:28

标签: python python-3.x opencv hough-transform

我正在处理float32类型的128 x 128数组。这些阵列是从二进制文件中提取的,我正尝试在每个阵列中找到磁盘。

当我尝试使用HoughCircles示例代码时:

img = Image.fromarray(fa)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

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

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

我收到以下错误:

  

文件“”,第2行,在       cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

     

TypeError:src不是numpy数组,也不是标量

如果我不使用Image.fromarray转换为图像,则会收到以下错误消息,指示我仍无法使用正确的类型。

  

文件“”,第1行,在       circle = cv2.HoughCircles(fa,cv2.HOUGH_GRADIENT,1,20,param1 = 50,param2 = 30,minRadius = 0,maxRadius = 0)

     

错误:OpenCV(3.4.4)   /用户/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/hough.cpp:1736:   错误:(-215:断言失败)!_image.empty()&& _image.type()==   CV_8UC1 &&(_image.isMat()|| _image.isUMat())   “ HoughCircles”

2 个答案:

答案 0 :(得分:0)

Houghcircles拍摄8位单通道灰度输入图像。并且您的数组是float32类型的128 x 128数组。因此,请尝试更改类型。

为了进行健全性检查,请在此操作之前和之后显示图像

img = Image.fromarray(fa)

答案 1 :(得分:0)

在您的情况下,您需要将图像转换为灰色:

image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

如果您拥有64位图像,则可以使用以下方法将其转换为8位:

8_image = np.uint8(64_image)