我目前正在computer-vision上使用computer-vision,但我无法使它工作。如何解决这个错误?
Error :
'Traceback (most recent call last):
File "F:\TIPE ENTROPIE\Programmation\Iris-Recognition-master\Iris Code\norm.py", line 82, in <module>
extract_iris(img)
File "F:\TIPE ENTROPIE\Programmation\Iris-Recognition-master\Iris Code\norm.py", line 53, in extract_iris
cord = get_circle(img, 35, 0, 50, 40)
File "F:\TIPE ENTROPIE\Programmation\Iris-Recognition-master\Iris Code\norm.py", line 14, in get_circle
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT,1,20, param1=p1,param2=p2,minRadius=minR,maxRadius=maxR)
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc \src\hough.cpp:1494: error: (-215) !_image.empty() && _image.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) && (_image.isMat() || _image.isUMat()) in function cv::HoughCircles` 这是我的代码:
import cv2
import numpy as np
## Definitions
def get_circle(img, minR, maxR, p1, p2):
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT,1,20, param1=p1,param2=p2,minRadius=minR,maxRadius=maxR)
circles = np.uint16(np.around(circles))
#return the first circle
return circles[0][0]
def print_img(img,x,y,w,h):
if w!=0 and h!=0:
cv2.imshow('detected circles',img[x:x+w,y:y+h])
cv2.imwrite('app-1/1.jpg',img[x:x+w,y:y+h])
else:
cv2.imshow('detected circles',img)
cv2.imwrite('app-1/1.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def reject_out(img, xc, yc, r):
row = len(img)
col = len(img[0])
for x in range(0,row):
for y in range(0, col):
res = (x-xc)*(x-xc) + (y-yc)*(y-yc)
if res > r*r :
img[x][y] = 0
def reject_in(img, xc, yc, r):
xs = xc-r
ys = yc-r
for x in range(xs,xs+2*r):
for y in range(ys, ys+2*r):
res = (x-xc)*(x-xc) + (y-yc)*(y-yc)
if res < r*r :
img[x][y] = 0
def extract_iris(img):
cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cord = get_circle(cimg, 35, 0, 50, 40)
# draw the outer circle
cv2.circle(cimg,(cord[0],cord[1]),cord[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(cord[0],cord[1]),2,(0,0,255),3)
h = 2*cord[2]
w = 2*cord[2]
x = cord[1]-cord[2]
y = cord[0]-cord[2]
nimg = img[x:x+w,y:y+h]
reject_out(nimg, h/2, w/2, h/2)
print_img(cimg,0,0,0,0)
cord = get_circle(nimg, 0, cord[2]-1, 50, 30)
print (nimg[0:w][cord[0]])
# draw the outer circle
cv2.circle(nimg,(cord[0],cord[1]),cord[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(nimg,(cord[0],cord[1]),2,(0,0,255),3)
reject_in(nimg, cord[1], cord[0], cord[2])
print_img(nimg,0,0,0,0)
print (nimg[0:w][cord[0]])
img = cv2.imread('test6.jpg',0)
img = cv2.medianBlur(img,5)
extract_iris(img)
`更新:新错误:
Traceback (most recent call last):
File "F:\TIPE ENTROPIE\Programmation\essai.py", line 80, in <module>
extract_iris(img)
File "F:\TIPE ENTROPIE\Programmation\essai.py", line 49, in extract_iris
cord = get_circle(cimg, 35, 0, 50, 40)
File "F:\TIPE ENTROPIE\Programmation\essai.py", line 8, in get_circle
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:11111: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor发布于 2018-05-16 09:24:15
正如@jeru-luke在评论中所说的那样,您应该在调用cv2.HoughCircles()之前添加cv2.HoughCircles():
def get_circle(img, minR, maxR, p1, p2):
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # <------------- Here
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT,1,20, param1=p1,param2=p2,minRadius=minR,maxRadius=maxR)
circles = np.uint16(np.around(circles))COLOR_BGR2GRAY而非COLOR_GRAY2BGR
更新:
在第二次调用nimg = cv2.cvtColor(nimg, cv2.COLOR_GRAY2BGR)之前添加get_circle:
更新2
import cv2
import numpy as np
## Definitions
def get_circle(img, minR, maxR, p1, p2):
if len(img.shape)==3:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT,1,20, param1=p1,param2=p2,minRadius=minR,maxRadius=maxR)
circles = np.uint16(np.around(circles))
#return the first circle
return circles[0][0]
def print_img(img,x,y,w,h):
if w!=0 and h!=0:
cv2.imshow('detected circles',img[x:x+w,y:y+h])
cv2.imwrite('app-1/1.jpg',img[x:x+w,y:y+h])
else:
cv2.imshow('detected circles',img)
cv2.imwrite('app-1/1.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def reject_out(img, xc, yc, r):
row = len(img)
col = len(img[0])
for x in range(0,row):
for y in range(0, col):
res = (x-xc)*(x-xc) + (y-yc)*(y-yc)
if res > r*r :
img[x][y] = 0
def reject_in(img, xc, yc, r):
xs = xc-r
ys = yc-r
for x in range(xs,xs+2*r):
for y in range(ys, ys+2*r):
res = (x-xc)*(x-xc) + (y-yc)*(y-yc)
if res < r*r :
img[x][y] = 0
def extract_iris(img):
cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cord = get_circle(cimg, 35, 0, 50, 40)
# draw the outer circle
cv2.circle(cimg,(cord[0],cord[1]),cord[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(cord[0],cord[1]),2,(0,0,255),3)
h = 2*cord[2]
w = 2*cord[2]
x = cord[1]-cord[2]
y = cord[0]-cord[2]
nimg = img[x:x+w,y:y+h]
reject_out(nimg, h/2, w/2, h/2)
print_img(cimg,0,0,0,0)
nimg = cv2.cvtColor(nimg, cv2.COLOR_GRAY2BGR)
cord = get_circle(nimg, 0, cord[2]-1, 50, 30)
print (nimg[0:w][cord[0]])
# draw the outer circle
cv2.circle(nimg,(cord[0],cord[1]),cord[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(nimg,(cord[0],cord[1]),2,(0,0,255),3)
reject_in(nimg, cord[1], cord[0], cord[2])
print_img(nimg,0,0,0,0)
print (nimg[0:w][cord[0]])
img = cv2.imread('test6.jpg',0)
img = cv2.medianBlur(img,5)
extract_iris(img)结果:

发布于 2018-05-17 03:55:40
Error 215是一个标志,表明图像没有以适当的格式进行给定的颜色转换。
scn == 3 || scn == 4建议img不是像BGR2GRAY所要求的那样是3通道或4通道图像.
请添加
print img.shape,看看第三个值是否为1,而不是3。这可能是错误的原因。
发布于 2020-05-14 12:49:11
我想你的形象是三维的。将图像转换为灰度,使用
img1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img1 = cv2.medianBlur(img1, 1)
circles = cv2.HoughCircles(img1, cv2.HOUGH_GRADIENT,1,20, param1=p1,param2=p2,minRadius=minR,maxRadius=maxR)https://stackoverflow.com/questions/50364235
复制相似问题