2013-09-22 10 views
10

参照を経由して本を検出する必要が、私は本棚で本を検出しようとしている:は、OpenCVのPythonの

enter image description here

私は境界ボックスのために輪郭を使用していました。しかし、ちょうど実際の本のオブジェクトをキャプチャしたいです。私がCannyからの閾値を小さくすれば、それは本自体を検出することはできませんが、書籍のタイトルや背骨の画像を検出します。

私はホウラインを使用していましたが、それは本の端を検出するためにはうまくいきました。境界ボックスを適用するにはどうすればよいですか?輪郭の代わりにハウラインを適用しますか?

I輪郭発見のために使用されるコード:

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) 

:houghlinesについて

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) 

ありがとうございます。

+0

私たちが試したコードのいくつかを見せてもらえますか? – tacaswell

+0

もちろん:)。 – xandra12791

+0

これはどの進歩ですか? 1年以上経ちました。私は同じことをすることに興味があります。 opencvで遊んでいるだけで、違いはnodejsラッパーを使っている点です。 – ThomasReggi

答えて

2

私は実際に何か類似の自分で作業しています。本棚でお互いの本を分けようとする。私はこれまであなたの側の進歩は何かを尋ねたいと思いますか?

私は輪郭法をまだ試していません。しかし、私が試みたのは、ハフラインを使用する前に、画像を前処理し、画像を前処理することでした。画像は大まかな結果を示しています。 enter image description here

私は完全に本を分割する必要があることを認めます。あなたがイメージで見ることができるように、私は実際に本の背の性質のために私が望んでいたより多くの行があります。私はこのような問題を取り除くのに役立つ前処理方法を探しています。

「私がCannyの閾値を下げると、書籍の端は検出されませんが、書籍のタイトルや脊柱の画像が検出されます」と言われました。たぶんHoughLineパラメータのために、あなたはthetaを調整することができますか?書籍のタイトル等が検出されないように、例えば90度に設定する。

HoughLinePは、基本的には確率的ハフライン変換です。それについての詳細はで見つけることができます:

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

は、私の方法は、いくつかのideas.Iを与える願ってもあなたの輪郭方法に関してであなたから更新を聞くことを願っています。

+1

私は参照してください。私はHoughLinesを使ってみましたが、私もHoughLinesPを使ってみました。私が今やってみたいのは、ブックご​​との場所を取得して抽出し、抽出されたブックの新しいコピーを作成することです。検出された本ごとに輪郭マスクを作成して、内部の詳細がfindContoursによって取得されないという考えがあります。ちょっと〜私は本当にこれに感謝し、ええ、もし私がアイデアを得るなら、私はあなたに知らせるでしょう。 :Dありがとうございました。 – xandra12791