11

ほら、私は本棚で本を検出しようとしてきました:

ここに画像の説明を入力

境界ボックスに Contours を使用しました。ただし、実際の本のオブジェクトをキャプチャしたいだけです。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)

よろしくお願いします。

4

1 に答える 1