需要使用OpenCV Python来检测书籍

11

我一直在尝试检测书架上的书:

enter image description here

我使用Contours来获得边界框。但是,我只想捕获实际的书对象。如果我降低了Canny的阈值,它就不会检测到书的边缘,而是检测到书脊上的标题或某些图像。

我使用了houghlines并成功检测到了书的边缘。如何应用bounding boxes,但使用houghlines而不是contours?

我用于查找轮廓的代码:

    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)

非常感谢您提前的帮助。


你能展示一下你尝试过的代码吗? - tacaswell
of course. :) hang on. - xandra12791
这方面有进展吗?已经过去一年了。我也对做同样的事情感兴趣。我也在玩opencv,只不过我使用的是nodejs封装器。 - ThomasReggi
1个回答

1

我其实正在做类似的事情。尝试在书架上将书籍分割开来。想问一下你这方面的进展如何了?

我还没有尝试过轮廓法。不过,我尝试了图像预处理,在使用HoughLines之前对图像进行了canny处理。下面的图像显示了一个粗略的结果。enter image description here

我承认我还没有完全把书籍分割出来。正如您在图像中看到的那样,由于书脊的性质,有更多的线条比我实际想要的。我正在研究可以帮助我解决这个问题的预处理方法。

我注意到你提到了 "如果我减小Canny的阈值,它就无法检测到书本边缘,但它会检测到书名或书脊上的一些图像。"也许对于HoughLine参数,你可以调整theta?例如将其调整为90度,这样书名等就不会被检测到。

您也可以尝试HoughLineP,它基本上是概率霍夫线变换。有关更多详细信息,请参见:

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

希望我的方法能够提供一些思路。我也希望能听到有关您轮廓方法的更新。希望我们可以分享技巧并共同努力,因为我们有一个共同的目标(: 希望尽快收到您的回复。

1
我明白了。我已经尝试使用HoughLines和HoughLinesP。现在我想做的是获取每本书的位置,以便可以提取它并创建提取后的新副本。我有一个想法,也许我可以为每个检测到的书籍做一个轮廓掩模,这样里面的细节就不会被findContours捕捉到了。嘿~非常感谢你,如果我有想法,我会告诉你的。:D 非常感谢。 - xandra12791

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接