とりあえず画像を読み込んでみるなど

画像ファイルの用意

まずは画像ファイルを用意しよう。こういう時は、Tiger.psかlenna.tiffを使うもんだと聞いたことがある。
というわけで、http://sipi.usc.edu/database/database.php?volume=misc からLennaの画像をダウンロードしておく。ちなみに「Scans of magazine pictures. Copyright belongs to original publisher or photographer.」となってるので、ホントは使用許諾は個別に取る必要があるみたいだぞ。

画像を読み込んで表示する

http://docs.opencv.org/3.1.0/d6/d00/tutorial_py_root.html を見よう見まねでやってみよう。

import numpy as np
import cv2
import os.path
lenna = "4.2.04.tiff"
if os.path.exists(lenna):
    img = cv2.imread("4.2.04.tiff")
    cv2.imshow("Lenna", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

画像表示するだけなんだけれど、numpy要るんスかね。

画像の2値化してみる

http://docs.opencv.org/trunk/d7/d4d/tutorial_py_thresholding.html を見ながら、Lennaの2値化をやってみる。コードの意味は、イマイチ分からない。

import cv2
import numpy as np
import os.path
from matplotlib import pyplot as plt
lenna = "4.2.04.tiff"
if os.path.exists(lenna):
    img = cv2.imread(lenna,0)
    img = cv2.medianBlur(img,5)
    ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)
    th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
    titles = ['Original Image', 'Global Thresholding (v = 127)', 'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
    images = [img, th1, th2, th3]
    for i in range(0,4):
        plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])

    plt.show()

さらに、大津の2値化。

import cv2
import numpy as np
import os.path
from matplotlib import pyplot as plt
lenna = "4.2.04.tiff"
if os.path.exists(lenna):
    img = cv2.imread(lenna,0)
    img = cv2.medianBlur(img,5)
    ret,th1 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    blur = cv2.GaussianBlur(img,(5,5),0)
    ret2,th2 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    titles = ['Original Image', 'Otsu Method', 'OTSU Method(w Gaussian Blur)']
    images = [img, th1, th2]
    for i in range(0,3):
        plt.subplot(1,3,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])

    plt.show()

これらのコードの意味を理解するのが、次の課題だ。