ラベル OpenCV の投稿を表示しています。 すべての投稿を表示
ラベル OpenCV の投稿を表示しています。 すべての投稿を表示

2015年11月16日月曜日

OpenCV Tutorial(4)〜特定画像の検出

このエントリーをはてなブックマークに追加
ドラクエの戦闘画面からカンダタの子分を取り出してみた。

元画像のこれから
これを取り出してみる。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img_rgb = cv2.imread('dq.jpeg')
img_rgb2 = img_rgb.copy()
img_gray = cv2.cvtColor(img_rgb2, cv2.COLOR_BGR2GRAY)
template = cv2.imread('template.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb2, pt, (pt[0] + w, pt[1] + h), (255,0,0), 1)

plt.subplot(121),plt.imshow(img_rgb)
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_rgb2)
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.show()

おぉ、とりだせた。


2015年11月15日日曜日

OpenCV Tutorial(3)〜画像の輪郭検出

このエントリーをはてなブックマークに追加
本当ならガウシアンフィルタにかけてノイズの提言をさせてから、色相の勾配を該当ピクセルの近傍と比較して計算して...ってやらないといけないわけだけど、OpenCVに関しては、関数を一発呼ぶだけでやってくれる。

すげえ。

import cv2
import numpy as np
from matplotlib import pyplot as plt

# グレースケールで読み込み
img = cv2.imread('20120129-00000000-jijp-000-0-view-thumb-450x300-8462.jpg',0)

# 閾値の上限200、下限を100に指定
edges = cv2.Canny(img,100,200)

plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()


今日の作業

この辺からだいたい分かっとく必要のあるところと、飛ばしてもいいところを見極めるのが難しくなってきた。そのおかげでか進捗が少ない。。。

2015年11月13日金曜日

OpenCV Tutorial(2)〜画像の平滑化

このエントリーをはてなブックマークに追加
Smoothing Images

画像の平滑化手法(Smoothing Images)に幾つかのやり方があり、それぞれ得意/不得意があるので簡単にでも理解した上で使い分けるのがベター。

大きくはノイズを減らすのが得意なlow-pass filters(LPF)と輪郭をシャープにするhigh-pass filters(HPF)に分けられる。

代表的な種類としてはこんなものがある。
  • 2D Convolution(2次元畳み込み)
  • Averaging(平均)
  • Gaussian Blurring(ガウシアンぼかし)
  • Median Blurring(中央値ぼかし)
  • Bilateral Filtering(バイラテラルフィルタ)
それぞれやってみる。画像は適当なものを取ってきた。

2D Convolution(2次元畳み込み)


import cv2
import numpy as np
from matplotlib import pyplot as plt

# 画像をそのまま読み込む
img = cv2.imread('G-symbol.png')

# すべての要素が浮動小数点1の5×5の行列を作成、平均を出すために25で割る
# このカーネルさえ自作できれば、いろいろなフィルターが自作できる
kernel = np.ones((5,5),np.float32)/25
# kernelをそのまま適用する。ビット深度はそのまま
dst = cv2.filter2D(img,-1,kernel)

# 横に1行で2つならべ、1つ目なので(1, 2, 1)
# subplot(121)はsubplot(1, 2, 1)と同じ
plt.subplot(121),plt.imshow(img),plt.title('Original')
# x,y軸のメモリなし
plt.xticks([]), plt.yticks([])
# 横に1行で2つならべ、2つ目なので(1, 2, 2)
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
# x,y軸のメモリなし
plt.xticks([]), plt.yticks([])

# 画像表示
plt.show()


Averaging(平均)


import cv2
from matplotlib import pyplot as plt

# 画像をそのまま読み込む
img = cv2.imread('G-symbol.png')

# 平均値ぼかし処理。今回の場合2Dフィルタと同じ処理になる。
blur = cv2.blur(img,(5,5))

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()                                                                         


Gaussian Blurring(ガウシアンぼかし)


import cv2
from matplotlib import pyplot as plt

img = cv2.imread('G-symbol.png')

# ガウシアンぼかし(5, 5)は中心からの計算するピクセル範囲
# ガウシアンの場合は自動的に中心に近いほど近傍値としての重みが高くなり平滑化される
blur = cv2.GaussianBlur(img,(5,5),0)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()


Median Blurring(中央値ぼかし)


import cv2
from matplotlib import pyplot as plt

img = cv2.imread('ZebraWithAttachedShadow_noisy_Salt_and_Pepper.jpg')

# 指定した範囲内でのピクセル数の平均値をとる。
# 白、黒などの極端なノイズは無視されるため、ノイズ除去に強い
median = cv2.medianBlur(img,5)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(median),plt.title('Median')
plt.xticks([]), plt.yticks([])
plt.show()


Bilateral Filtering(バイラテラルフィルタ)


import cv2
from matplotlib import pyplot as plt

img = cv2.imread('woos4.jpg')

# 入力画像、中心部からのピクセル範囲、カラーシグマ値、空間シグマ値
# カラーシグマが大きいとピクセル間での濃淡差が大きくないと効果がでない
# 空間シグマが大きいと輪郭意外のボケがおおきくなるが計算処理に時間がかかる
blur = cv2.bilateralFilter(img,9,75,75)

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Bilateral')
plt.xticks([]), plt.yticks([])
plt.show()


今日の作業

スムージングの特徴をもう少し明確につかみたい。

2015年11月12日木曜日

OpenCV Tutorial(1)〜特定色のトラッキング

このエントリーをはてなブックマークに追加
OpenCVのサイトにオンラインドキュメントでチュートリアルがあったので、ざっと眺めてためそうと思う。使う言語はCではなくpythonにしてみる。(慣れてるし)

Image Processing in OpenCVから。

Changing Colorspaces

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    # Take each frame
    _, frame = cap.read()

    # Convert BGR to HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

青色でマスクされた部分が動画でトラッキングされながらグレースケールと青のみでマスクされて表示された。


今日の作業

Bloggerのデザイン微修正とOpenCVのチュートリアル見つけて1つのみ。残念。あと、ソースにコメントを付けて補足したい。

2015年11月11日水曜日

画像の特徴点を抽出する

このエントリーをはてなブックマークに追加
せっかく入れたOpenCVなので何かやってみたい。

といってもパッと難しいことはできないので、よくある画像の特徴点抽出をやってみようかと思った。
import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('/usr/local/src/opencv-3.0.0/samples/data/lena.jpg',0)

# Initiate STAR detector
orb = cv2.ORB_create()

# find the keypoints with ORB
kp = orb.detect(img,None)

# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp, None,color=(0,255,0))
plt.imshow(img2),plt.show()

出来た。

今日の作業

OpenCVのインストールが手強すぎて、あまり他のことに時間が割けなかった。とはいえ、OpenCV入れたので何ができるかの基本は押さえておきたい。明日は少し進展できたらいいな。

OpenCV3.0.0のインストール

このエントリーをはてなブックマークに追加

昔、1.x時代に少し触ったことがあったのだけど、今は3.0にまでなってると知ったのでもう一回触ってみたくてインストールしてみた。

OpenCVのインストールに必要なパッケージのインストール


まずはソースをダウンロードして解凍するとこまでは省略。

こっからcmakeしていくわけだけど、画像や動画周りのライブラリがあからさまに足りなさそう。なので、OpenCVのドキュメントを見ながら潰していくことにした。
http://docs.opencv.org/3.0-last-rst/doc/tutorials/introduction/linux_install/linux_install.html?highlight=install

Ubuntuベースで書かれているので少し困る。僕が入れようとしているのはFedoraだ。apt-getではなくdnfなのだ。すでに心が折れそうなのだが読み解いて、足らない時は考える方向にした。

書かれているのは
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
といった感じ。すでにffmpegがないのが気がかりな点だったのだが、
ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
とあるので、ライブラリかffmpegかが入っていればよさそうだ。

少し調べてみよう。

ちなみにRPM Fusionのリポジトリは追加済み。パッケージ調べてみてこれでいけるんじゃないかと踏んだ。
# dnf install ffmpeg-devel ffmpeg gtk2-devel pkgconfig python-devel numpy openjpeg-devel libpng-devel libtiff-devel jasper-devel tbb tbb-devel libdc1394-devel libdc1394
メタデータの期限切れの確認は、0:16:32 前の Wed Nov 11 03:30:28 2015 に実施しました。
Package pkgconfig-1:0.28-9.fc23.x86_64 is already installed, skipping.
依存性が解決されました。
========================================================================================================================
 パッケージ                アーキテクチャ
                                       バージョン                             リポジトリ                           容量
========================================================================================================================
インストール中:
 SDL                       x86_64      1.2.15-20.fc23                         updates                             213 k
 atk-devel                 x86_64      2.18.0-1.fc23                          fedora                              185 k
 atlas                     x86_64      3.10.2-6.fc23                          fedora                              5.7 M
 cairo-devel               x86_64      1.14.2-2.fc23                          fedora                              354 k
 expat-devel               x86_64      2.1.0-12.fc23                          fedora                               61 k
 ffmpeg                    x86_64      2.8.1-1.fc23                           rpmfusion-free-updates-testing      1.3 M
 ffmpeg-devel              x86_64      2.8.1-1.fc23                           rpmfusion-free-updates-testing      679 k
 ffmpeg-libs               x86_64      2.8.1-1.fc23                           rpmfusion-free-updates-testing      5.5 M
 fontconfig-devel          x86_64      2.11.94-4.fc23                         fedora                              137 k
 freetype-devel            x86_64      2.6.0-3.fc23                           fedora                              378 k
 fribidi                   x86_64      0.19.6-5.fc23                          fedora                               69 k
 gdk-pixbuf2-devel         x86_64      2.32.1-1.fc23                          fedora                              217 k
 gl-manpages               noarch      1.1-10.20140424.fc23                   fedora                              1.0 M
 glib2-devel               x86_64      2.46.1-2.fc23                          fedora                              436 k
 graphite2-devel           x86_64      1.2.4-5.fc23                           fedora                               41 k
 gtk2-devel                x86_64      2.24.28-2.fc23                         fedora                              2.9 M
 harfbuzz-devel            x86_64      1.0.6-1.fc23                           updates                             122 k
 jasper-devel              x86_64      1.900.1-31.fc23                        fedora                              379 k
 lame-libs                 x86_64      3.99.5-5.fc23                          rpmfusion-free-updates-testing      345 k
 libX11-devel              x86_64      1.6.3-2.fc23                           fedora                              984 k
 libXau-devel              x86_64      1.0.8-5.fc23                           fedora                               19 k
 libXcomposite-devel       x86_64      0.4.4-7.fc23                           fedora                               21 k
 libXcursor-devel          x86_64      1.1.14-4.fc23                          fedora                               27 k
 libXdamage-devel          x86_64      1.1.4-7.fc23                           fedora                               14 k
 libXext-devel             x86_64      1.3.3-3.fc23                           fedora                               79 k
 libXfixes-devel           x86_64      5.0.1-5.fc23                           fedora                               17 k
 libXft-devel              x86_64      2.3.2-3.fc23                           fedora                               24 k
 libXi-devel               x86_64      1.7.4-3.fc23                           fedora                              109 k
 libXinerama-devel         x86_64      1.1.3-5.fc23                           fedora                               18 k
 libXrandr-devel           x86_64      1.5.0-2.fc23                           fedora                               25 k
 libXrender-devel          x86_64      0.9.9-2.fc23                           fedora                               21 k
 libXxf86vm-devel          x86_64      1.1.4-2.fc23                           fedora                               23 k
 libass                    x86_64      0.12.1-2.fc23                          fedora                               85 k
 libavdevice               x86_64      2.8.1-1.fc23                           rpmfusion-free-updates-testing       76 k
 libdc1394                 x86_64      2.2.2-4.fc23                           fedora                              123 k
 libdc1394-devel           x86_64      2.2.2-4.fc23                           fedora                               57 k
 libdrm-devel              x86_64      2.4.65-1.fc23                          fedora                              111 k
 libgfortran               x86_64      5.1.1-4.fc23                           fedora                              285 k
 libicu-devel              x86_64      54.1-5.fc23                            fedora                              741 k
 libjpeg-turbo-devel       x86_64      1.4.1-2.fc23                           fedora                              104 k
 libpng-devel              x86_64      2:1.6.17-2.fc23                        fedora                              310 k
 libquadmath               x86_64      5.1.1-4.fc23                           fedora                              173 k
 libraw1394-devel          x86_64      2.1.0-6.fc23                           fedora                               44 k
 libtiff-devel             x86_64      4.0.4-1.fc23                           fedora                              487 k
 libva                     x86_64      1.6.1-1.fc23                           fedora                               83 k
 libxcb-devel              x86_64      1.11.1-1.fc23                          updates                             1.1 M
 libxshmfence-devel        x86_64      1.2-2.fc23                             fedora                              9.6 k
 mesa-libEGL-devel         x86_64      11.0.3-1.20151012.fc23                 fedora                               42 k
 mesa-libGL-devel          x86_64      11.0.3-1.20151012.fc23                 fedora                              163 k
 numpy                     x86_64      1:1.9.2-2.fc23                         fedora                              3.0 M
 openal-soft               x86_64      1.16.0-7.fc23                          fedora                              290 k
 opencv-core               x86_64      2.4.11-5.fc23                          fedora                              1.8 M
 openjpeg                  x86_64      1.5.1-15.fc23                          fedora                              189 k
 openjpeg-devel            x86_64      1.5.1-15.fc23                          fedora                              376 k
 openjpeg-libs             x86_64      1.5.1-15.fc23                          fedora                               89 k
 pango-devel               x86_64      1.38.1-1.fc23                          fedora                              324 k
 pixman-devel              x86_64      0.33.4-1.fc23                          updates                              18 k
 python-devel              x86_64      2.7.10-8.fc23                          fedora                              397 k
 python-macros             noarch      2.7.10-8.fc23                          fedora                               61 k
 python-nose               noarch      1.3.7-4.fc23                           fedora                              280 k
 schroedinger              x86_64      1.0.11-9.fc23                          fedora                              317 k
 tbb                       x86_64      4.3-3.20141204.fc23                    fedora                              140 k
 tbb-devel                 x86_64      4.3-3.20141204.fc23                    fedora                              259 k
 x264-libs                 x86_64      0.148-1.20151020gita0cd7d3.fc23        rpmfusion-free-updates-testing      590 k
 x265-libs                 x86_64      1.8-1.fc23                             rpmfusion-free-updates-testing      528 k
 xorg-x11-proto-devel      noarch      7.7-16.fc23                            fedora                              287 k
 xvidcore                  x86_64      1.3.4-2.fc23                           rpmfusion-free-updates-testing      266 k
 zlib-devel                x86_64      1.2.8-9.fc23                           fedora                               55 k

トランザクションの要約
========================================================================================================================
インストール  68 Packages

総ダウンロード容量: 34 M
インストール済み容量: 139 M

OpenCVのインストール

OpenCVのconfigureをccmakeで行う。インストール先は/usr/local/opencvとして、python, javaにも対応しておく。あとexampleも入れておきたい。
# cd /usr/local/src/opencv-3.0.0/
# mkdir build
# cd build/
# ccmake ..

PackageKit-Qt5-develも必要だったのと、python3-develpython3-numpyplibv4l-develpmesa-libGL-develmesa-libGLU-develも追加しておいた。

またJAVA用にantも探しているぽかったのでインストールしておいた。

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/ant/binaries/apache-ant-1.9.6-bin.tar.gz
# tar -xvzf apache-ant-1.9.6-bin.tar.gz
# ln -s /usr/local/src/apache-ant-1.9.6 /usr/local/ant
antへのパスも通しておく。
ANT_HOME=/usr/local/ant
PATH=$PATH:$ANT_HOME/bin

今回ccmakeで選んだオプションをキャプチャーしたので貼っておく。




ここからmakeしていく。
# make -j7
バリバリにwarningが出てるが、一旦、気にしない。気長に待つ。

エラーが出てこけた。

大域スコープ:
cc1plus: 警告: 認識できないコマンドラインオプション ‘-Wno-unnamed-type-template-args’ です
[ 47%] Linking CXX executable ../../bin/cpp-example-autofocus
../../lib/libopencv_world.so.3.0.0: `DefaultViewPort::staticMetaObject' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvWinProperties' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `CvWindow::staticMetaObject' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `CvTrackbar::staticMetaObject' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvPushButton' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for GuiReceiver' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvCheckBox' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvTrackbar' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for DefaultViewPort' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvWindow' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `CvButtonbar::staticMetaObject' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvRadioButton' に対する定義されていない参照です
../../lib/libopencv_world.so.3.0.0: `vtable for CvButtonbar' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました
samples/cpp/CMakeFiles/example_autofocus.dir/build.make:97: recipe for target 'bin/cpp-example-autofocus' failed
make[2]: *** [bin/cpp-example-autofocus] Error 1
CMakeFiles/Makefile2:3671: recipe for target 'samples/cpp/CMakeFiles/example_autofocus.dir/all' failed
make[1]: *** [samples/cpp/CMakeFiles/example_autofocus.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2

opencv_worldが悪さをしているみたいなので、一旦OFFにした。各種モジュールを1つのライブラリにするだけみたいなので、特に問題ないかなと。

あと、POLICYIDがどうのこうのと言われるので、CMakeList.txtに追記した。
if(POLICY CMP0045)
  cmake_policy(SET CMP0049 OLD)
endif()

if(POLICY CMP0059)
  cmake_policy(SET CMP0059 OLD)
endif()
再トライしたところ、うまくmake終了。make installもうまくいった。

ただ、ここまでだとsampleがインストールされないので、動作確認するまでにsampleもインストールしておく。
# cd /usr/local/src/opencv-3.0.0/build/samples
# make
この後、もうCMakeList.txtができるので、もう1度ccmake

# pwd
/usr/local/src/opencv-3.0.0/build/samples
# ccmake .
# make

これで/usr/local/src/opencv-3.0.0/samplesにサンプルがインストールされた。

実際に試してみる。

# /usr/local/src/opencv-3.0.0/samples/cpp/cpp-example-facedetect --cascade="/usr/local/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.3 /usr/local/src/opencv-3.0.0/samples/data/lena.jpg 


出来た!!!
でもソースをコンパイルしたディレクトリ配下なので少し気持ち悪い。/usr/local/opencvの下にどうしたらインストールできるんやろう。