首页 文章

需要通过OpenCV Python检测书籍

提问于
浏览
10

看,我一直试图在书架上检测书籍:

enter image description here

我使用Contours作为边界框 . 但是,我只想捕获 actual 书籍对象 . 如果我从Canny中减去阈值,它将不会自己检测书籍边缘,但它会检测书籍 Headers 或脊柱中的某些图像 .

我使用了houghlines,它可以很好地检测书籍边缘 . 如何应用边界框但使用houghlines而不是轮廓?

我用于轮廓发现的代码:

edges = cv2.Canny(blur,thresh,thresh*2)
    drawing = np.zeros(img.shape,np.uint8)  
    contours,hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours:
        x,y,w,h = cv2.boundingRect(cnt)
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        rect = cv2.minAreaRect(cnt)
        box = cv2.cv.BoxPoints(rect)
        box = np.int0(box)

哪里:

img = cv2.imread('books3.jpg')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray,(5,5),0)

对于houghlines:

lines = cv2.HoughLines(edges,1,np.pi/180,120)
    for rho,theta in lines[0]:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 1000*(-b))   
        y1 = int(y0 + 1000*(a))    
        x2 = int(x0 - 1000*(-b))   
        y2 = int(y0 - 1000*(a))

哪里:

im = cv2.imread('books2.jpg')
    gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray,100,300,apertureSize = 3)

非常感谢你提前 .

1 回答

  • 2

    我实际上正在做类似的事情 . 试图在书架上将书籍彼此分开 . 我想问一下到目前为止你方面的进展如何?

    我还没有尝试过轮廓法 . 但是,我尝试的是预处理图像,在使用HoughLines之前清除图像 . 下图显示了粗略的结果 .
    enter image description here

    我承认我必须完美地分割书籍 . 正如你在图像中看到的那样,由于书脊的本质,我实际想要的线条更多 . 我正在研究预处理方法,可以帮助我摆脱这样的问题 .

    我注意到你提到过“如果我从Canny中减去门槛,它就不会自己检测到书籍边缘,但会检测到书籍 Headers 或脊柱中的一些图像 . ”也许对于HoughLine参数,你可以调整theta?例如,到90度,以便不会检测到书名等 .

    您也可以尝试 HoughLineP ,它基本上是概率Hough线变换 . 有关详细信息,请参阅:

    http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html

    希望我的方法能给出一些想法 . 我也希望听到你对轮廓方法的更新 . 希望我们能够分享技巧并共同努力,因为我们有一个共同的目标(希望尽快收到您的回复) .

相关问题