Необходимо обнаружить книги через OpenCV Python

Смотрите, я пытался обнаружить книги на книжной полке:

enter image description here

Я использовал контуры для ограничивающих прямоугольников. Тем не менее, я просто хочу захватить актуальные объекты книги. Если я уменьшу порог от Canny, он не будет обнаруживать сами края книги, но обнаруживает названия книг или некоторые изображения из позвоночника.

Я использовал houghlines, и он хорошо работал для обнаружения края книги. Как я могу применять ограничивающие поля, но с houghline вместо контуров?

код, который я использовал для поиска контуров:

    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

Я действительно работаю над чем-то подобным. пытаясь отделить книги друг от друга на книжной полке. Я хочу спросить, каков прогресс на вашей стороне до сих пор?

Я еще не пробовал метод контуров. Тем не менее, я попытался предварительно обработать изображение, замаскировать изображение перед использованием HoughLines. Образное изображение показывает грубый результат. enter image description here

Я признаю, что мне нужно отлично сегментировать книги. Как вы можете видеть на изображении, есть больше строк, которые я действительно хотел из-за характера книжного позвоночника. Я изучаю методы предварительной обработки, которые могут помочь мне избавиться от такой проблемы.

Я заметил, что вы упомянули, что "если я уменьшу порог от Canny, он не обнаружит самих границ книги, но обнаружит названия книг или некоторые изображения из позвоночника". Может быть, для параметров HoughLine, вы можете настроить тета? например, до 90 градусов, чтобы названия книг и т.д. не были обнаружены.

Вы также можете попробовать HoughLineP, который в основном является вероятностным преобразованием линии Hough. Более подробную информацию об этом можно найти в:

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

Надеюсь, что мои методы дают некоторые идеи. Я также надеюсь услышать от вас информацию о вашем контурном методе. Надеюсь, мы сможем поделиться советами и работать вместе, поскольку у нас есть общая цель (: Надеюсь скоро услышать от вас.