error: (-215:Assertion failed) !_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat()) in function 'cv::HoughCircles'
error: (-215:Assertion failed) !_image.empty() && _image.type() == CV_8UC1 && (_image.isMat() || _image.isUMat()) in function 'cv::HoughCircles'
注:
嗨,我是 OpenCV 和 Whosebug 的新手。
我试图通过使用 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_imreturn形状(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)
谁能告诉我这里出了什么问题,并告诉我如何解决??
Hough circles 需要一个 unit8 图像作为输入,如果你使用 final_im.dtype
检查 finaly_im 的类型,它很可能是一个 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 文档link 了解更多信息
注:
嗨,我是 OpenCV 和 Whosebug 的新手。
我试图通过使用 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_imreturn形状(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)
谁能告诉我这里出了什么问题,并告诉我如何解决??
Hough circles 需要一个 unit8 图像作为输入,如果你使用 final_im.dtype
检查 finaly_im 的类型,它很可能是一个 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 文档link 了解更多信息