OpenCV 3.0に果敢に挑戦し続けてみる

個人的な趣味の一環として、OpenCV 3.0がらみの情報をまとめてみる。「引用はいぃんよー、無断転載はあかんよー」ということで。

OpenCV 2.4.9でカメラ画像をvizで表示してみる

ということで、gyaoべるぜバブ見つつ、OpenCV 2.4.9 + vizでカメラのキャプチャ画像をぐりぐり表示するサンプル作ってみましたり。

 

ポイント。

  • 画像を表示するには、WImage3DをWidgetとして使う。
  • 画像を更新するには、WImage3D.setImage()で。
  • 逐次更新するにはwhile(){ spinOnce(1, TRUE); }で。

<追記 2014/05/06 22:05>

setImageするたびにメモリリークしている可能性あり。

VTKのsmartPointerによって適切に管理されているかもしれない・・・が

Reference Counterがちゃんとあってるのかなあ、という大きな不安が。

 

f:id:anobiidae:20140506093951p:plain

 ちょっとカッコ良くしたバージョン(ぐるぐるまわる)

f:id:anobiidae:20140506221727p:plain

 

ソースコードはこの下と。

続きを読む

OpenCV 2.4.9 リリース

http://opencv.org/opencv-2-4-9-is-out.html をざっくり翻訳。

VTKに関しては既に書いてるから使い方マニュアルは不要かなーと思いつつ。

 

OpenCL最適化がいくつか実装されました。(ocl::sum, ocl::countNonZero, ocl::minMax, bitwise operationss, Haar face detector, etc)

 

[Android]

NativeCameraに関する複数の修正が入りました。(NativeCameraView, cv::VideoCapture);

全てのCUDAが利用可能なSOCに対して、CUDAが利用できるようになりました。

 

[VTK]

VTKを基本とした3次元可視化モジュールvizが、2.4ブランチにバックポートされました。

このモジュールは、クラウド・メッシュ・カメラ・曲線・単純なwidget(cube、line, circle)を表示・配置するのに非常に便利です。

デモ映像をItseez Youtube channelで確認できます。

 

Numerous bugfixes in code and docs from community

・156 pull requests have been merged since 2.4.8

・55 reported bugs have been closed since 2.4.8 

 

いまのことーはー playback! playback! (OpenCV 3.0.0-dev? inpaintで画像復元)

 

 

 

こんな感じで、画像の上に落書きしたら元データなくて焦ることってあります・・・よね?こういう話。

 

 

f:id:anobiidae:20140315115516p:plain

 

こういうときでも、OpenCVがあればOK!

f:id:anobiidae:20140315115638p:plain

治したい所のマスクイメージを用意すれば

f:id:anobiidae:20140315115710p:plain

 

はい、この通り~

 

ソースコードはこの続きに。

続きを読む

ヘッダの場所かわってますなあ(OpenCV 3.0.0-dev superres, 超解像)

昨日のsuperresのコードを、3.0.0-devでコンパイルしようとするとerrorになる。

make
g++ a.cpp `pkg-config opencv --cflags --libs`
/tmp/ccddz3hX.o: In function `main':
a.cpp:(.text+0x3c8): undefined reference to `cv::superres::createFrameSource_Video(std::string const&)'
collect2: error: ld returned 1 exit status
make: *** [a.out] Error 1

さて、これなんだべさー?って引数の形が変わってる。

Ver 3.0.0-3583-gdd6cf15-dirty

Ptr<framesource> cv::superres::createFrameSource_Video(const String& fileName)
{
    return makePtr<videoframesource>(fileName);
}

Ver 2.4.8

Ptr<framesource> cv::superres::createFrameSource_Video(const string& fileName)
{
    return new VideoFrameSource(fileName);
}

おや? /usr/local/include/の下を見ると

$find /usr/local/include/opencv2/ -name "superres*"
/usr/local/include/opencv2/superres
/usr/local/include/opencv2/superres/superres.hpp ← OpenCV 2.4.8
/usr/local/include/opencv2/superres.hpp ← OpenCV 3.0.0-dev

sudo make installで確認。

-- Up-to-date: /usr/local/lib/libopencv_superres.so.2.4.8
-- Up-to-date: /usr/local/lib/libopencv_superres.so.2.4
-- Installing: /usr/local/lib/libopencv_superres.so
-- Installing: /usr/local/include/opencv2/superres/optical_flow.hpp
-- Up-to-date: /usr/local/include/opencv2/superres/superres.hpp

v.s.

-- Up-to-date: /usr/local/lib/libopencv_superres.so.3.0.0
-- Up-to-date: /usr/local/lib/libopencv_superres.so.3.0
-- Installing: /usr/local/lib/libopencv_superres.so
-- Up-to-date: /usr/local/include/opencv2/superres.hpp
-- Installing: /usr/local/include/opencv2/superres/optical_flow.hpp

 

……って両方とも出ちゃってるですかやだー!!まだ慌てるような時間じゃない、opencv2/opencv.hppなら、opencv2/opencv.hppなら何とかしてくれる…

#ifndef __OPENCV_ALL_HPP__
#define __OPENCV_ALL_HPP__

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/photo.hpp"
#include "opencv2/video.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/objdetect.hpp"
#include "opencv2/calib3d.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/contrib.hpp"
#include "opencv2/ml.hpp"

#endif

してくれませんでした。

 

結論:OpenCV 2.xとOpenCV 3.0.0とを共存させるような場合には、ヘッダの位置にも注意しないとダメですね、ということで。

 

OpenCV 2.x → #include <opencv2/superres/superres.hpp>

OpenCV 3.0.0 → #include <opencv2/superres.hpp>

超解像(superres)、OpenCV 3.0だとだめっぽい。2.4.8での結果。

超解像OpenCV 3.0.0-devでコンパイルエラーを引き起こす。

ということで、2.4.8での動作結果を。

 

f:id:anobiidae:20140314212550p:plain

 

上が低解像度な元画像、で、下が超解像処理をした結果。

こうしてみると左のペンギンのひれ部分がなだからかだったり、色々差があると。

 

OpenCVで使うときの問題は、「動画ファイルかカメラを入力にしないといけない」ということ。つまり、静止画群じゃ処理できないので、仕方が無くこんな感じにやりました、っと。

 

ソースコードはこちら。

続きを読む

違和感、仕事しろ!(OpenCV 3.0.0-dev Seamless Cloning)

OpenCV 3.0.0-devのphoto moduleネタです。

まず、結果から。

 

ここにすた丼があるじゃろ?

f:id:anobiidae:20140305070545j:plain

 

 

これをこうして、

f:id:anobiidae:20140305070606j:plain

f:id:anobiidae:20140305070615p:plain

 

こうじゃ!!

f:id:anobiidae:20140305070629j:plain

 

ということで、スムージングして違和感なく、すた丼の上にたい焼きを乗せられました、というのがこの機能。(若干、たい焼きの色が変わってる)。ただ、パラメータの意味とかよくわかーんなーい、上に、ドキュメント間違ってるじゃんかと。

 

サンプルコードはこちら。

続きを読む

ずっと求めていた「自分だけのブラック」(OpenCV 3.0.0-dev decolorのアルゴリズムをちら見する)

今回いきなりでてきたdecolorって、なんじゃらほいということでググる。今回Decolorizationで採用しているアルゴリズムはこちら(本文との一致性などから判断)

http://www.cse.cuhk.edu.hk/leojia/papers/decolorization_iccp12.pdf

 

斜め読みした感じだと「weak color order constraintっていうのを導入して、明瞭にorderの無いような色のペアに対しては、自動的に視覚的なコンテキストに基づいて明度の差をつけるよ!」っていう感じと思しき。

 

うーん、このアルゴリズムだと、「画像全体に対して処理した時」と「画像の一部を処理した結果を繋ぎ合せた時」で結果が変わっちゃうんじゃないのかなーと。

 

http://www.cse.cuhk.edu.hk/leojia/papers/decolorization_iccp12.pdf のP5から引用すると他の手法と比較すると、これだけ差が出ると。

f:id:anobiidae:20140303070242p:plain

上から3,4番目のものが一番さが解りやすいと思う。上から三番目は「模様の中で明快に差が付いている」し、4番目は「違和感の無いグラデーションが復元されている」し。流石でございます。

 

一方で、下2つで明るいオレンジ色が結構、濃い色にマッピングされているのは若干気になるなあという気がしないでもないですけどね。

 

適材適所ということでよろしくお願いいたします。

 

論文の一部の翻訳はこちら。誤訳ごめんなさい。

続きを読む