OpenCV

cv::datasets

ソースコードを見てやっと設計思想はなんとなく分かったけど、その一方で特に何も決まってない感じなのですね。 http://docs.opencv.org/3.2.0/d8/d00/group__datasets.html

VideoCapture

OpenCV3.2でも読み込むMatの型は指定できないっぽいね。

VideoCapture

OpenCV3.2でも読み込むMatの型は指定できないっぽいね。

imread flags (ImreadModes) による型決定ルール

戻り値の Matの型(bit深度とチャンネル数)をどう決めるかのルール。 opencv/loadsave.cpp at master · opencv/opencv · GitHub flags depth channels 備考 IMREAD_LOAD_GDAL 画像から決定 画像から決定 GDALがあれば IMREAD_UNCHANGED 画像から決定 画像か…

OpenCV3 で default OpenCL device を変更する方法

プログラム側で変更するのはかなり面倒そうなので、環境変数 OPENCV_OPENCL_DEVICE で変更する。 参考:http://answers.opencv.org/question/59115/opencv-30-beta-and-opencl-setdevice/ 当該コード:https://github.com/opencv/opencv/blob/master/modules…

How to build OpenCV 3.1.0 with Viz, FFmpeg and Cuda using Intel Compiler 2016 on CentOS 7

訂正しました。 # yum -y --enablerepo=epel,nux-dextop install ffmpeg-devel vtk-devel # cmake -DCUDA_ARCH_BIN=3.5 -DCUDA_ARCH_PTX="" -DWITH_TBB=YES -DCMAKE_C_COMPILER=/opt/intel/bin/icc \ -DCMAKE_CXX_COMPILER=/opt/intel/bin/icpc -DCMAKE_CXX_…

行列のアダマール積

一般的な行列の掛け算ではなく、同じサイズの行列の要素同士の掛け算(行列の乗法 - Wikipedia、アダマール積 - Wikipedia)。普通の行列の積では、2チャンネル行列は複素行列とみなされるが、アダマール積はそうではないので注意。基本構造体 — opencv 2.2 …

copyMakeBorder の BORDER_ISOLATED

以前の日記 http://d.hatena.ne.jp/kamekamekame877/20150520に書いていたのですが、OpenCV 3.0 現在、copyMakeBorder もその内部で呼び出すborderInterpolate も、BORDER_ISOLATEDを使用していないようですね…

How to build OpenCV 3.0.0 with Viz, Cuda, OpenNI2 and Qt using Intel Compiler on Visual Studio 2013

またもやカネに物を言わせたコンパイラによるビルド。CMake 最新版で、Specify native compilers を選択すると、icl.exe が選ばれていると思うので、それを選択する。CMAKE_CXX_COMPILER と CMAKE_C_COMPILER が C:/Program Files (x86)/Intel/Composer XE 2…

How to build OpenCV 3.0.0 on CentOS 7 (64bit) using Intel Compiler (icc, icpc)

以前の記事 2014-01-13 - kamekamekame877の日記 の続編。ICCでOpenCV使う人いないのかな。例によって長い行は \ で改行してます。 OpenCVとiccで使うパッケージのインストール。 # yum install tcsh bash-completion wget libpng-devel libjpeg-turbo-devel…

copyMakeBorder

英語版のドキュメントにしか無いけど、部分画像のROIをはみ出さずに境界値を作る場合はBORDER_ISOLATEDを併用しないといけなくなったのか…知らなかった。 http://docs.opencv.org/modules/imgproc/doc/filtering.html#copymakeborder http://code.opencv.org…

VideoCapture

連番ファイルを読み込むときなどには CV_CAP_PROP_FORMAT や CV_CAP_PROP_CONVERT_RGB が使えるかとおもいきや、そうでもない。CeempleのOpenCV3.0ではCV_8U3Cで読み込まれるようです。%02dとかで連番ファイルを読み込めるので便利だと思ったんですが…ちなみ…

チャンネル数の異なるMat間の四則演算等

チャンネル数の異なるMat間では、そのままではサイズが等しくても演算できないのだけど、Mat::isContinuous() が真かつ演算対象が連続するチャンネルならば、チャンネル数を合わせて演算する方法がある。 // m3の1チャンネルにm1を足す void func(Mat3f m3, …

OpenCVのJPEG2000は可逆圧縮

非可逆なJPEG2000は実装されない?

それぞれのMat変数のサイズは不変として,以下の様なループ処理

cv::Mat a, b, c; while(1) { a = (b == b) & c; } と cv::Mat a, b, c, d; while(1) { d = b == b; a = d & c; } では,後者のほうが若干速い。その理由は,式テンプレート MatExpr をオペランドにとる演算は,加減乗除と要素毎の積(mul),負号,絶対値の演…

Linux で IPP 使って OpenCV 2.4.9 ビルド

OpenCVFindIPP.cmakeの231行目〜248行目(下記参照)をコメントアウト。 if (UNIX) get_filename_component(INTEL_COMPILER_LIBRARY_DIR ${IPP_ROOT_DIR}/../lib REALPATH) if (IPP_X64) if(NOT EXISTS ${INTEL_COMPILER_LIBRARY_DIR}/intel64) message(SEND_E…

Mat::copyTo と Mat::convertTo の動作

Mat::copyTo とMat::convertTo はそれぞれコピーと型変換コピーを行うメンバ関数です。マニュアルに記載はないのですが、実はコピー先の変数の型とコピー元の型との関係によってそれぞれ挙動が細かく変わります。それぞれ特殊な場合を書いておきます。なお、…

OpenCV 2.4.8をCentOS 6 (64bit)にてインテルコンパイラ (icc, icpc)でビルドする

CentOS標準のCMake 2.6ではmake時に string does not recognize sub-command MD5 というエラーが出る。参考:Building opencv-2.4.7 on CentOS 6 - OpenCV Q&A Forum。そこで、CMake 最新版をダウンロードDownload | CMake。32bitバイナリ版でよい。 次のよ…

Visual Studio 2012 で OpenCV 2.4.7 ビルド

まだCUDA5.5がVC2013をサポートしてないので2012でビルドする。以前、nvccの設定ファイルを書き換えたりすると新しいVCでもビルドできた気もするけど面倒なのでやらない。 今回も、「pchの仮想メモリの範囲が超えています」とかエラー吐く2つのプロジェクト…

CentOS 5.9 でのOpenCV2.4.5 + TBB + OpenCV World のビルド

次の点を目的とする。 GCC 4.4の指定(デフォルトは4.1) OpenCV Worldのビルド(highguiなどのライブラリファイルを1つにまとめたもの) AVX命令の有効化 TBBの有効化 ソースを展開したフォルダで実行。(cmakeの行は\で改行してあります。~/local/は環境に合わ…

cv::Matx

OpenCV 2.2 で追加されたコンパイル時固定サイズ行列クラス。cv::Matの基本処理 — OpenCV-CookBook cookbookやマニュアルにない機能もあるので紹介する。対象バージョンは2.3.1。 変数宣言 cv::Matx<Type, Rows, Columns> m; テンプレート引数に行数、列数を定数で指定する。浮動</type,>…

OpenCV 2.3.1のcv::Matxとの2項演算子の不具合の解消。

以下それぞれでコンパイルエラーが出る。 cv::Vec3d v = cv::Matx33d() * cv::Vec3d(); cv::Matx44d() * cv::Scalar(); それぞれ、Matx と Vec との乗算演算の戻り値が Matxであるためと、opencv2/core/operations.hpp:656 の operator*(Matx, Scalar) 内に…