前のチュートリアル: CUDAを用いたTegra向けOpenCVのビルド
次のチュートリアル: OpenCVのドキュメント作成
| |
| 原著者 | Ana Huamán |
| 互換性 | OpenCV >= 3.4.4 |
- 警告
- このチュートリアルには古い情報が含まれている可能性がある。
目標
このチュートリアルでは、以下の方法を学ぶ:
ソースコード
C++
- ダウンロード可能なコード: こちら をクリック
- コードの概観:
#include <iostream>
{
std::string image_path = samples::findFile("starry_night.jpg");
Mat img = imread(image_path, IMREAD_COLOR);
{
std::cout << "Could not read the image: " << image_path << std::endl;
return 1;
}
imshow("Display window", img);
int k = waitKey(0);
if(k == 's')
{
imwrite("starry_night.png", img);
}
return 0;
}
n次元の密な配列クラス
Definition mat.hpp:840
bool empty() const
配列に要素がない場合にtrueを返す。
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
Python
- ダウンロード可能なコード: こちら をクリック
- コードの概観:
import cv2 as cv
import sys
if img is None:
sys.exit("Could not read the image.")
if k == ord("s"):
cv::String findFile(const cv::String &relative_path, bool required=true, bool silentMode=false)
要求されたデータファイルを探そうとする。
void imshow(const String &winname, InputArray mat)
指定したウィンドウに画像を表示する。
int waitKey(int delay=0)
キー押下を待つ。
bool imwrite(const String &filename, InputArray img, const std::vector< int > ¶ms=std::vector< int >())
画像を指定したファイルに保存する。
Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
ファイルから画像を読み込む。
解説
C++
OpenCV 3には複数のモジュールがある。それぞれが画像処理の異なる領域やアプローチを担当する。これはこれらのチュートリアルのユーザーガイド自体の構成からも既に見て取れるだろう。それらのいずれかを使用する前に、まず各モジュールの内容が宣言されているヘッダファイルをインクルードする必要がある。
ほとんどの場合、最終的に次を使用することになる:
- core セクション。ライブラリの基本的な構成要素がここで定義されているため
- imgcodecs モジュール。読み書きのための関数を提供する
- highgui モジュール。ウィンドウに画像を表示する関数が含まれているため
また、コンソールへの行出力・入力を容易にするために iostream もインクルードする。
using namespace cv; を宣言することで、以降は名前空間を明示することなくライブラリ関数にアクセスできる。
Python
最初のステップとして、OpenCVのPythonライブラリをインポートする。適切な方法は、さらに cv という名前を割り当てることであり、以降この名前でライブラリを参照する。
import cv2 as cv
import sys
それでは、メインのコードを分析しよう。最初のステップとして、OpenCVのサンプルから画像「starry_night.jpg」を読み込む。そのために、cv::imread 関数を呼び出し、第1引数で指定したファイルパスを使って画像を読み込む。第2引数は省略可能で、画像をどの形式で取得したいかを指定する。これは次のいずれかである:
- IMREAD_COLOR は画像をBGRの8ビット形式で読み込む。これはここで使用されるデフォルトである。
- IMREAD_UNCHANGED は画像をそのまま(存在する場合はアルファチャンネルも含めて)読み込む
- IMREAD_GRAYSCALE は画像を輝度画像として読み込む
読み込みの後、画像データは cv::Mat オブジェクトに格納される。
C++
std::string image_path = samples::findFile("starry_night.jpg");
Python
- 覚え書き
- OpenCVは画像形式のWindowsビットマップ(bmp)、ポータブル画像形式(pbm、pgm、ppm)、Sunラスター(sr、ras)をサポートする。プラグインの助けを借りれば(自分でライブラリをビルドする場合はそれらを使用するよう指定する必要があるが、私たちが配布するパッケージにはデフォルトで含まれている)、JPEG(jpeg、jpg、jpe)、JPEG 2000(jp2 - CMake内ではJasperというコードネーム)、TIFFファイル(tiff、tif)、ポータブルネットワークグラフィックス(png)といった画像形式も読み込める。さらに、OpenEXRも利用可能である。
その後、画像が正しく読み込まれたかどうかのチェックが実行される。
C++
{
std::cout << "Could not read the image: " << image_path << std::endl;
return 1;
}
Python
if img is None:
sys.exit("Could not read the image.")
次に、cv::imshow 関数の呼び出しによって画像が表示される。第1引数はウィンドウのタイトルで、第2引数は表示される cv::Mat オブジェクトである。
ユーザーがキーを押すまでウィンドウを表示し続けたい(そうしないとプログラムがあまりにも早く終了してしまう)ため、cv::waitKey 関数を使用する。その唯一の引数は、ユーザー入力をどれだけ待つか(ミリ秒単位で計測)である。ゼロは無限に待つことを意味する。戻り値は押されたキーである。
C++
imshow(
"Display window", img);
Python
最後に、押されたキーが「s」キーだった場合、画像がファイルに書き出される。このために cv::imwrite 関数が呼び出され、ファイルパスと cv::Mat オブジェクトを引数に取る。
C++
Python