カテゴリー別アーカイブ: OpenCV

ofxCvのdrawMatの挙動

openFrameworksでよくofxCvさんにお世話になってます。

Matを直でoFの画面に描画したい時にofxCv::drawMat()を使うんですが地味に引っかかったのでメモ

普通にカラーやグレイスケールのイメージの情報をもたせたMatをdrawMatで描画するのは大丈夫。

ただし、ROIを設定したMatをdrawMatで描画しようとするとおかしな描画になるという問題が…

 

Mat src;//何か画像を入れておく

cv::Mat roi = src(cv::Rect(10,10,100,100));
//cv::drawMat(roi, 0,0); //うまく表示されない…

cv::Mat roitmp;
roi.copyTo(roitmp);

cv::drawMat(roitmp, 0,0);

とりあえずMatをcopyTo()したり、clone()してたりするとうまくいくみたいでした。

UnityでOpenCVのネイティブプラグインを利用してみる

凹みTipsさん(http://tips.hecomi.com/entry/2014/01/16/011727)がOpenCVを使って書いたネイティブプラグインをUnityから使っていたので僕も真似してみることにしてみました。
(基本的には凹みTipsさんと同じなので差分のところだけ)

参考程度ですが、私の開発環境はMacでUnityは4.3を利用しています。

1.OpenCVをビルドする。
MacでOpenCVを利用する場合、homebrew等でインストールするのが楽で良いです。
でも、Unityのネイティブプラグインを使う場合32bitで作らねばならず、homebrewでは32bitビルドしてもうまくいかないため、CMakeを利用してOpenCVのソースからビルドする必要があります。

CMAKE_OSX_ARCHITECTURESにi386;x86_64と値を設定してやれば32bitでも使えるようになります。
また、BUILD_SHARED_LIBSのチェックも外して、スタティックライブラリとしてビルドされるようにしました。
(凹みTipsさんはdylibでやってたのですが何故かうまく行かなかった…)

2.Bundleを作る
WindowsではDLLですが、MacではBundleを作ります。
Xcodeで新しいプロジェクトを作る時にBundleを設定すればいけると思います。

凹みTipsさんからソースをそのまま利用させてもらいました。

3.Unityに読み込む
ここは特に引っかかることなく成功。

1.のあたりで結構引っかかってうまく行かなかったのですが、じっくり差分のところを文字に起こしてみると意外とシンプルな感じになりました。