前提・実現したいこと
本棚の画像を読み込ませて、画像の中に何の本があるかを推定するものを作りたいです。
そのための手順として
- 本棚の画像から本ごとにハフ変換でエッジ検出してセグメントする
- 本の文字を読み込む
というものなのですが、ハフ変換のところでつまづいています。
発生している問題・エラーメッセージ
上の画像を読み込ませると、検出される直線の数がとても少ないです。
(元画像)
(Canny変換をした画像)
(ハフ変換をした画像)
該当のソースコード
python
1import cv2 2import numpy as np 3 4img = cv2.imread('input.jpg') 5gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 6edges = cv2.Canny(gray,50,150,apertureSize = 3) 7 8lines = cv2.HoughLines(edges,1,np.pi/180,200) 9print(len(lines)) 10for line in lines: 11 for rho,theta in line: 12 a = np.cos(theta) 13 b = np.sin(theta) 14 x0 = a*rho 15 y0 = b*rho 16 x1 = int(x0 + 1000*(-b)) 17 y1 = int(y0 + 1000*(a)) 18 x2 = int(x0 - 1000*(-b)) 19 y2 = int(y0 - 1000*(a)) 20 21 cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) 22 23cv2.imwrite('output.jpg',img) 24 25
試したこと
cvs.cannyや'cv2.HoughLines'のパラメーターを色々変えてみましたがうまくいきません。本の検出の精度を上げるためにはどのような工夫をすればいいか教えてください。
補足情報(FW/ツールのバージョンなど)
論文はこちらのサイトを読みました。ハフ変換で処理していたのでハフ変換でうまく機能すると思います。
https://faculty.ist.psu.edu/zzhou/paper/JCDL17-SmartLibrary.pdf