takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

OpenCV

FastAPIをOpenCVと連携

FastAPIはPythonで簡単にAPIサーバーが立てられるライブラリです。 fastapi.tiangolo.com 今回これを利用して、HTTP POSTで送られた画像になんらかの認識処理をかけて、結果をjsonで返すようなプログラムを書いたのでメモしておきます。 その際、送られてき…

PyTorchで学習したモデルをOpenCVで使う (Custom Layer編)

この記事はOpenCV Advent Calendar 2020 18日目の記事です。 はじめに OpenCVにはDNNモジュールという畳み込みニューラルネットワークの機能が実装されています。この機能は推論専用のため、CaffeやTensorflowなどの深層学習ライブラリ上で学習したモデルを…

PyTorchで学習したモデルをOpenCVで使う

以前、Keras+Tensorflowで学習したモデルをOpenCVで推論に使用する方法について解説したことがありました。 run Keras model on opencv from Takuya Minagawa www.slideshare.net OpenCVにはDNNモジュールという畳み込みニューラルネットワークを使用するた…

OpenCVのVizモジュールを使ってカメラの位置と点群を表示

三次元再構成なんかの論文では、よくカメラの位置を四角錘で可視化した図が乗ってたりしますが、その図もOpenCVのVizモジュールを使えば簡単に実現できます。 ここにチュートリアルもありますが、一応解説を日本語で書いておきます。 尚、Vizモジュールを使…

KCFコードリーディング

はじめに この記事はOpenCV Advent Calender 2016の第22日目の記事です。 OpenCVのextraモジュールの中にTracking APIというものがあり、それを使用すると動画中の物体を追跡するための様々なアルゴリズムを使用することが出来ます。 Tracking APIに使い方に…

OpenCVに実装されている領域分割アルゴリズムの解説

OpenCV内で実装されているGrabCutとMean Shift Segmentationについて、コードと論文を読みつつアルゴリズムを文書に日本語でまとめたので公開します。 GrabCutとMean Shiftはそれぞれcv::grabCut()とcv::pyrMeanShiftFiltering()として実装されています。 Gr…

OpenCVでIntegral Channel Featuresを試す (OpenCV Advent Calendar)

この記事は、OpenCVアドベントカレンダー18日目の記事です。 http://qiita.com/advent-calendar/2015/opencv OpenCVで物体検出器を作成するにあたり、手っ取り早いのはopecv_traincascadeという実行ファイルを使用して検出器をトレーニングすることです。 Op…

OpenCVで魚眼カメラのキャリブレーション

はまったのでメモ OpenCVの魚眼カメラのキャリブレーションは、calib3dモジュールのcv::calibrateCamera()とは微妙に使い方が違うので、下手するとドハマリします。 通常のカメラキャリブレーションの方法は、calibration.cppというサンプルコードが用意され…

カメラ画像からクレジットカード番号を読み取る

以前、お仕事でクレジットカードをカメラで撮影し、そこからカード番号を読み取るプログラムをOpenCVを使って開発しました。ただ、そのお仕事はお客様の都合で採用には至らず、作りっぱなしのまま放置してました。 が、せっかく作ったのに誰にも使われないま…

画像認識用Data Augmentationツールと物体検出評価ツールを自作した

思いっきり車輪の再発明っぽいツールを2つほど作りました。 Data Augmentationツール Deep Convolutional Neural Networkとかで画像を学習させる際、学習画像をずらしたりぼかしたり、色々と変形を加えて学習画像を増やすことで、認識をロバストにするとい…

OpenCVの物体検出解説資料アップデート版

昔、OpenCVの物体検出器の使い方について、技術評論社の「OpenCVで学ぶ画像認識」という連載中で解説しましたが、当時はまだOpenCVが1.0とか1.1だったため大分情報が古くなってます。 で、その後コンピュータビジョン勉強会でOpenCV2.0用にアップデートした…

画像アノテーションツール Object Marker 2.0

昔作ったObject Markerというツールをアップグレードし、GitHubに上げました。 https://github.com/takmin/ObjectMarker 元々は、解像度の高い画像を読み込むとウィンドウが画面からはみ出てしまって使い辛かったので、それを修正しようと思ってました。しか…

OpenCVのtraincascadeのnumPos引数はvecファイル内のサンプル数より少ない数を設定すること

OpenCVの物体検出器を学習する際の注意点。 物体検出器の原理や学習方法については、ここを読んで下さい。 で、たとえば opencv_createsamples -info positive.txt -num 1000 -vec hoge.vec -w 30 -h 30 みたいな感じで1000枚の正例画像からvecファイルを作…

ラベリング、モーフィング、cv::Matのバイナリ保存

過去に自分の書いたコードを漁っていたら、他の人にも役に立ちそうな関数をいくつか見つけたのでGitHub上に公開しました。どれも小ネタ程度(大ネタはコードが整理されていない)ですが、ググってきた人のお役に立てれば幸いです。 どれもOpenCVを使用してい…

OpenCVの平面細分割用 C++クラス SubDiv2D

OpenCVのCインターフェースでは、平面細分割を作成してくれる関数が(現在はレガシーコードとして)用意されていましたが、C++版は長らく実装されていませんでした。 ところがサンプルコードを覗いたところ、"delauney2.cpp"というコードを発見。APIドキュメ…

Pythonからctypesを使ってOpenCVで作成したライブラリを呼び出してみた

例の如く、自分用の作業メモ。Python初心者の僕が、PythonとOpenCVで書かれたC/C++ライブラリとを連携する必要が出たため、色々調べてみました。ctypes、SWIG、Boost.Python、Cython等、方法がたくさんありすぎてどれを使うか悩みました。 以下に、PythonとC…

OpenCVでマーカレスAR

以前こちらの記事で紹介したマーカレスARのソースをGitHub上で公開しました。MITライセンスです。こちらからダウンロードできます。 https://github.com/takmin/OpenCV-Marker-less-AR 本当はリファクタリングが終わってから公開しようと思っていたのですが…

Point Cloud Libraryのレンジデータを画像として保存

個人的な必要性があって、レンジデータを画像として保存する関数を書きました。 PCL(Point Cloud Library)1.2まではpcl::visualization::RangeImageVisualizerというクラスにsavePPM()という関数があって、これでレンジデータを画像に保存できたようなのです…

OpenCVを使用している環境上へGoogle Testをインストール

OpenCVを使用している環境上へGoogle Testをインストールするのに結構はまったので、自分用のメモとして残しておきます。(なので、相変わらずやっつけで書いてます。) (2011/09/23追記 以下の記事はGoogle TestおよびOpenCVを共に静的ライブラリ形式で作成…

3/5にOpenCV祭りを開催しました

以前このブログでも書きましたが、僕は「コンピュータビジョン勉強会@関東」という勉強会を主催しています。 普段は、「コンピュータビジョン最先端ガイド」という本を元に、輪講のような形式で勉強会を進めているのですが、今回は「OpenCV祭り」と題してOp…

ARウェルカムボード

こんなもの作りました。 というわけで結婚しました。

ObjectMarkerをじみーに機能強化

先日ここの日記で取り上げたObjectMarkerですが、「まだまだ使いにくい」というお声を頂いたため、地味に修正を加えました。機能は地味ですが、内部的にはガラッと変わりました。前回のバージョンよりも大分使いやすくなったと思います。変更点は以下のとお…

物体検出/追跡研究者のための画像アノテーションツール ObjectMarker

コンピュータビジョンで物体検出や追跡を行う場合、当然のことながら学習データというのをある程度用意しなくてはいけません。具体例としてはOpenCVのHaarClassifierCascadeで物体検出するための検出器を訓練するとき、訓練画像をたくさん集めて、その対象と…

マルチチャネルMatクラスの要素へのアクセス方法

配列を表すクラスMatの要素へアクセスする方法について。 例えばMatがCV_32FC1などのシングルチャネルなら、2.0以降では簡単に要素にアクセスできて、 cv::Mat hoge(3,3,CV_32FC1); hoge.at(0,0) = 0.1; と、こんな感じでアクセスできる。で、Matがマルチチ…

CvSURFPointとcv::KeyPointの対応関係

OpenCVのSURF特徴点抽出処理は、C版ではCvSURFPoint構造体に格納されるけど、C++版ではcv::KeyPointクラスに格納されます。その対応関係がわかりづらかったので、ソースを覗いてみました。 KeyPointメンバ CvSURFPointメンバ 説明 pt pt 座標を表す構造体 si…

opencv.jpのお手伝い

大した更新頻度の無いこのブログのメインコンテンツの一つがOpenCVのtipsだったりするわけですが、今度opencv.jpの編集を少しお手伝いすることになりました。 なので今後OpenCV関連のtipsは、基本的にopencv.jpにアップしていこうかと思ってます。 益々こち…

OpenCV2.0におけるファイル保存機能の使い方

OpenCV2.0のC++インターフェースにおいて、クラスや構造体の永続化の関数(XML/YAML Persistence)が、1.1のそれと色々変わったのでメモ。2.0のファイル保存機能に関してはまだまだドキュメントも書籍も乏しい状態なので、ソースを眺めてわかったやり方など…

OpenCV2.0のコンパイル 追記

前回の続き。 Visual C++ 2008 Express EditionでOpenCV2.0を使ったアプリケーション開発をする際の注意点をいくつか。 1. コンパイルはDebugモードとReleaseモード両方で行う前回はReleaseモードでコンパイルしたけど、開発時にDebugモードで開発を行う場合…

OpenCV2.0のコンパイル

よーやっと2.0に手を出しました。 以下、例のごとくコンパイル時のやっつけメモ書きです。。。 ちなみに環境はWindows XP + Visual Studio 2008 Expressです。 1. OpenCV2.0のインストール http://sourceforge.net/projects/opencvlibrary/ から"OpenCV-2.0.…

判別分析二値化プログラム

誰かの役に立つかもと思うので、ソースをさらす。 判別分析二値化法というのは、画像の濃度ヒストグラムをとってやって、その分離度が最大となるように、二値化のためのしきい値を決めてやるというもの。詳しくは、ここら辺を読んでみて。 http://ipr20.cs.e…