【问题标题】:Need to detect books via OpenCV Python需要通过 OpenCV Python 检测书籍
【发布时间】:2013-10-07 01:18:23
【问题描述】:

看,我一直在尝试检测书架中的书籍:

我使用轮廓作为边界框。但是,我只想捕获 实际 书籍对象。如果我降低 Canny 的阈值,它本身不会检测书的边缘,但会检测书名或书脊上的一些图像。

我使用了水平线,它可以很好地检测书的边缘。如何应用边界框但使用轮廓线而不是轮廓?

我用于轮廓查找的代码:

    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)

对于轮廓线:

    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)

非常感谢您。

【问题讨论】:

  • 你能告诉我们一些你尝试过的代码吗?
  • 当然。 :) 等等。
  • 这方面有什么进展吗?已经一年多了。我有兴趣做同样的事情。使用 opencv 以及唯一的区别是我使用的是 nodejs 包装器。

标签: python opencv


【解决方案1】:

实际上我自己也在做类似的事情。试图将书架中的书籍相互分割。我想问一下你们那边目前进展如何?

我还没有尝试过轮廓方法。但是,我所做的尝试是对图像进行预处理,在使用 HoughLines 之前对图像进行精加工。下图显示了粗略的结果。

我承认我也必须完美地分割书籍。正如您在图像中看到的,由于书脊的性质,线条比我实际想要的要多。我正在研究可以帮助我解决此类问题的预处理方法。

我注意到您提到“如果我降低 Canny 的阈值,它不会检测书本身的边缘,但它会检测书名或书脊中的一些图像。”也许对于 HoughLine 参数,您可以调整 theta?例如旋转到 90 度,这样就不会检测到书名等。

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

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

希望我的方法能给一些想法。我也希望听到你关于轮廓方法的更新。希望我们可以分享技巧并共同努力,因为我们有一个共同的目标(:希望很快收到您的来信。

【讨论】:

  • 我明白了。我尝试过使用 HoughLines,也尝试过使用 HoughLinesP。我现在要做的是获取每本书的位置,以便我可以提取它并为提取的书创建一个新副本。我有一个想法,也许我可以为每个检测到的书做一个轮廓蒙版,这样 findContours 就不会拾取里面的细节。嘿〜我真的很感激,是的,如果我有想法我会告诉你的。 :D 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多