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) #表示

ようやく白線の一部を認識できた!