Install OpenCV in CentOS6.5


CentOSOpenCV入れましたー。メモ。

[ビルドに必要なファイルのインストール]
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum install cmake28

CentOS(6.5)の場合、標準のリポジトリではいるcmakeのバージョンが古いためビルド時にエラーがでます。。
(CMake Error at /(略)/opencv-2.4.8/cmake/cl2cpp.cmake:50 (string): string does not recognize sub-command MD5)
そのためepelリポジトリのcmake28をインストールします。

[OpenCVのソース取得(2.4.8)]
wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.8/opencv-2.4.8.zip/download
unzip opencv-2.4.8.zip
cd opencv-2.4.8

[ビルドしてインストール]
cmake28 .
make
make install

足りないファイルがあったらyum installでインストールしてください。

[ライブラリを利用する]
gcc a.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc

[実行する]
libが/usr/local/libにあるためエラー出る。
error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory

*一時的にライブラリを有効化
export LD_LIBRARY_PATH= $LD_LIBRARY_PATH: /usr/local/lib

*継続して利用したい場合
vi /etc/ld.so.conf.d/usr_local_lib.conf
/usr/local/lib
ldconfig

実行時にlibraryが見つからないエラーが出る場合は、
ldd <実行ファイル> でnot foundとなっているライブラリを
find / -name <ライブラリ名> で探してやればいい。
ない場合は、yumダウンロードの必要がある。

OpenCV de Asobu


OpenCVで文字認識してみましたーほぼできました。

久しぶりにOpenCV使ったのでメモ。

1. 導入

VisualStudioの設定

・追加のインクルードディレクトリ
../opencv/build/include

・追加のライブラリディレクトリ
(Win32) ../opencv/build/x86/vc12/lib
(x64) ../opencv/build/x64/vc12/lib

・ビルド後イベント
(Win32) xcopy /Y “..\opencv\build\x86\vc12\bin\*.dll” “$(TargetDir)”
(x64) xcopy /Y “..\opencv\build\x64\vc12\bin\*.dll” “$(TargetDir)”

・ライブラリを追加

#ifdef _DEBUG
#pragma comment(lib, "opencv_core248d.lib")
#pragma comment(lib, "opencv_highgui248d.lib")
#pragma comment(lib, "opencv_imgproc248d.lib")
#else
#pragma comment(lib, "opencv_core248.lib")
#pragma comment(lib, "opencv_highgui248.lib")
#pragma comment(lib, "opencv_imgproc248.lib")
#endif

#include &lt;opencv2/core/core.hpp&gt;
#include &lt;opencv2/highgui/highgui.hpp&gt;
#include &lt;opencv2/imgproc/imgproc.hpp&gt;

2. API

・ファイル読み書き
cv::Mat cv::imread(filename);
bool cv::imwrite(filename, image);

・クローン
cv::Mat image.clone();

・二値化
cv::threshold(src, dst, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);

・輪郭抽出
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(image, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_NONE);

・バウンディングボックス取得
cv::Rect cv::boundingRect(std::vector<cv::Point> contour);

・アフィン変換
float angle = 0.0f, scale = 1.0f;
cv::Point2f center(0, 0);
const cv::Mat matrix = cv::getRotationMatrix2D(center, angle, scale);
cv::Mat dst;
cv::warpAffine(src, dst, matrix, src.size());

・テンプレートマッチ
cv::Mat result;
cv::matchTemplate(src, tmp, result, CV_TM_CCOEFF_NORMED);
cv::Point max_pt;
double max_val;
cv::minMaxLoc(result, NULL, &max_val, NULL, &max_pt);