opencv チュートリアルチャレンジ6 画像の勾配

画像の勾配 — OpenCV-Python Tutorials 1 documentation

Laplacian, sobelx, sobely

やってみよう

#!/usr/bin/env python
# -*- coding: utf-8 -*
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('170519-144402.jpg', 0)
img = cv2.imread('sudoku-original.jpg', 0)
#img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])

plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
cv2.imwrite('Laplacian.png', img)

plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
cv2.imwrite('sobelx.png', img)

plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
cv2.imwrite('sobely.png', img)

plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()

あれ?

こうなった・・・。

f:id:pongsuke:20170523110803p:plain

f:id:pongsuke:20170523110804p:plain

公式のサンプルは、 f:id:pongsuke:20170523110937j:plain

こうだ。

随分違うぞ?

調べた所、勝手に正規化しているせいらしい。

pyplot — Matplotlib 2.0.2 documentation

正規化しないように指定します。

#!/usr/bin/env python
# -*- coding: utf-8 -*
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('170519-144402.jpg', 0)
img = cv2.imread('sudoku-original.jpg', 0)

plt.subplot(2,2,1),plt.imshow(img, cmap='gray', vmin=0, vmax=255)
plt.title('Original'), plt.xticks([]), plt.yticks([])

laplacian = cv2.Laplacian(img,cv2.CV_64F)
plt.subplot(2,2,2),plt.imshow(laplacian, cmap='gray', vmin=0, vmax=255)
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
cv2.imwrite('Laplacian.png', img)

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
plt.subplot(2,2,3),plt.imshow(sobelx, cmap='gray', vmin=0, vmax=255)
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
cv2.imwrite('sobelx.png', img)

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
plt.subplot(2,2,4),plt.imshow(sobely, cmap='gray', vmin=0, vmax=255)
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
cv2.imwrite('sobely.png', img)

plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()

f:id:pongsuke:20170523114025p:plain

f:id:pongsuke:20170523113846p:plain

まだ、Laplacian の結果がおかしい。

なにかあるのだろうか・・・。