読者です 読者をやめる 読者になる 読者になる

OpenCV C++とPythonでの画像の取り扱いの比較

表題について自分なりにまとめています。経験値が足りないせいで誤ったことを書いているかもしれません。 C++のcv::Mat 例えば縦幅480, 横幅640のカラー画像を例にとって考えてみます。 cv::Mat img = cv::imread("board.jpg", CV_LOAD_IMAGE_COLOR); cv::Ma…

OpenCVがアルゴリズムのコンペを開催

OpenCV Vision Challenge | OpenCV によると、OpenCVがアルゴリズムの公募を行うようです。分野は以下の11個です。 (1) image segmentation (2) image registration (3) human pose estimation (4) SLAM (5) multi-view stereo matching (6) object recognit…

OpenCVを使うならC++かPythonか?

Computer Visionの巨大なライブラリであるOpenCV。C/C++, Python, Javaのインターフェースが提供されており、どの言語で始めるか迷っている方もいるかと思います。私は残念ながらJavaからOpenCVを使ったことはないのですが、C++からはそれなりに、Pythonから…

Python版OpenCVにて補完機能を使う (VS2013 Python Tools)

以前に Visual Studio Express 2013をPythonのIDEとして使う - minus9d's diary という記事を書きました。これの延長として、VS2013にてOpenCVのPythonバインディングを使用するときに、補完機能を有効にする方法について書きます。 「ソリューションエクス…

OpenCV3.0 alphaをビルド

OpenCV3.0 alphaが2014/8/21にリリースされました。さっそくopencv-3.0.0-alpha.exeをダウンロードしてきて解凍しましたが、今回はビルド済み.libと.dllは提供されていないようです。しかたがないのでCMakeを使ってビルドしました。 ビルドは今まで通りの方…

OpenCV 2.xで1次元のヒストグラム画像を生成する

OpenCV 2.xでヒストグラム画像を生成する方法を調べました。結論から言うと、ヒストグラムを生成する関数はあるんですが、それを画像として表示する簡便な方法はないようです。いくつかのサイトを参考にして、自分でもヒストグラム画像を作成してみました。W…

OpenCVのビルド情報を表示する

Qt版で追加された関数 — opencv 2.2 (r4295) documentation に載っている新しいUI cvCreateButton() を試そうとしたところ、以下のリンクエラーが出てビルドできなかった。 エラー 2 error LNK2019: 未解決の外部シンボル _cvCreateButton が関数 "int __cde…

OpenCV 2.xでトラックバーを使ってみる

またOpenCVの記事。この間作ったSURFの特徴点を表示するプログラムを改造して、あるスコア以上の特徴点のみを表示するようにしました。下図がその例です。response値が2397以上の特徴点のみを表示しています。 トラックバーはcv::createTrackbar()により実現…

OpenCVのcv::Matで部分行列を作成する方法

OpenCVのcv::Matにて部分行列をスライスして作るよい方法があったのでご紹介します。 例えば 1 2 3 4 5 6 7 8 9 という行列の、左上の2x2の部分からなる部分行列 1 2 4 5 を作るサンプルは以下の通り。 cv::Mat m1 = (cv::Mat_<double>(3, 3) << 1, 2, 3, 4, 5, 6, 7</double>…

OpenCV 2.xでマウスコールバックなGUI

OpenCV 2.x系で、ウィンドウを表示してその上でマウスのクリックイベントを取得するGUIのサンプルです。OpenCV Tutorial 3のコードを大いに参考にしています。ただしC++系の関数に書き換えています。 基本的な流れは以下のようになります。 namedWindow()で…

OpenCV 2.xでSURFを用いて特徴点を抽出、描画

表題のことを単にやってみました。環境はWindows 7 + Visual Studio Express 2013 + Opencv2.4.8です。 ヘッダのインクルード 必要なファイルを以下のようにインクルード。SURFはSIFTと同じく特許が取られていて商用利用できなかったはずなので要注意。イン…

カラー画像を3色で分離、さらに色を入れ替えた画像を作成

コード 以下の通り。 void bgr_split(){ cv::Mat src = cv::imread("./input/baboon.jpg", 1); vector<cv::Mat> planes; // 3つのチャネルB, G, Rに分離 (OpenCVではデフォルトでB, G, Rの順) cv::split(src, planes); // 保存 cv::imwrite("./output/b.jpg", planes[</cv::mat>…

16,777,216色をすべて使ったpng画像を生成する

R, G, Bがそれぞれ8ビットの場合、生成可能な色数は(2^8)^3 = 約1678万色。これらすべてを4,096×4,096の正方形に配置するプログラムをお遊びで書いてみた。 void show_all_bgr_colors(){ cv::Mat img(256*16, 256*16, CV_8UC3); for(int b = 0; b < 256; ++b…

cv::Mat使用時の画素へのアクセス方法

OpenCVのcv::Matクラスに格納された画像データの各画素にアクセスする方法を、以下の2種類ご紹介する。 atメソッドを用いる方法 dataメソッドを用いる方法 画素にアクセスする回数が少ないのならatメソッド、全画素に順番に読み出すなど頻繁に画素にアクセス…

OpenCV2.4.3をWindowsでビルド

OpenCV2.4.3をWindowsでビルド。ただ使うだけならOpenCVのインストーラを展開するだけでいいのだが、今回はOpenCLとIntel TBBを動かせるようにするためにビルドを試みた。ハマりどころが多くあるので一筋縄で行かなかった。 以下は64ビット版のDLLをVisual S…

OpenCV2.x系で画像を読み込んでcv::Matに格納し、情報を得る

OpenCV2.x系から画像をcv::Matで扱うようになったのに未だに慣れず、毎回調べてしまっている。このへんでいい加減まとめておく。 1 cv::Matの基本処理 — OpenCV2 プログラミングブック リファレンス編がもっとも参考になった。以下はこのサンプルをもとにし…