首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hough圆开环CV误差

Hough圆开环CV误差
EN

Stack Overflow用户
提问于 2018-05-16 06:55:56
回答 3查看 5.2K关注 0票数 1

我目前正在computer-vision上使用computer-vision,但我无法使它工作。如何解决这个错误?

代码语言:javascript
复制
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`  

这是我的代码:

代码语言:javascript
复制
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)
`

更新:新错误:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-16 09:24:15

正如@jeru-luke在评论中所说的那样,您应该在调用cv2.HoughCircles()之前添加cv2.HoughCircles()

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

结果:

票数 3
EN

Stack Overflow用户

发布于 2018-05-17 03:55:40

Error 215是一个标志,表明图像没有以适当的格式进行给定的颜色转换。

scn == 3 || scn == 4建议img不是像BGR2GRAY所要求的那样是3通道或4通道图像.

请添加

print img.shape,看看第三个值是否为1,而不是3。这可能是错误的原因。

票数 1
EN

Stack Overflow用户

发布于 2020-05-14 12:49:11

我想你的形象是三维的。将图像转换为灰度,使用

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50364235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档