OpenCVでエッジ検出
エッジがうまく検出できていないので直線が抽出できないのではないかと思い
エッジ検出のサンプルをさがしてみた。
http://www.non-fiction.jp/2015/08/15/edge-detect-laplacian/
%matplotlib inline import cv2 import matplotlib.pyplot as plt # matplotlibの描画系 #Gray Scaleで画像読み込み img = cv2.imread('IMG160806-164620.JPG',0) #Gaussianフィルタを利用して平滑化 img = cv2.GaussianBlur(img,(3,3),0) #Laplacianフィルタ lap = cv2.Laplacian(img,cv2.CV_32F) #8ビット符号なし整数に変換 edge_lap = cv2.convertScaleAbs(lap) plt.imshow(edge_lap) #表示
おぉ、なんだかうまくいきそうだ。
いろいろパラメータをいじりつつもう一回挑戦
%matplotlib inline import cv2 import matplotlib.pyplot as plt # matplotlibの描画系 #Gray Scaleで画像読み込み img = cv2.imread('IMG160806-164620.JPG') #Gaussianフィルタを利用して平滑化 img = cv2.GaussianBlur(img,(3,3),0) #Laplacianフィルタ lap = cv2.Laplacian(img,cv2.CV_32F) #8ビット符号なし整数に変換 edge_lap = cv2.convertScaleAbs(lap) edges = cv2.Canny(edge_lap,50,200,apertureSize = 3) minLineLength = 250 maxLineGap = 20 lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap) for line in lines: for x1,y1,x2,y2 in line: cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(show_img) #表示
moremagic
2016-08-18