Visual Studio 2013 Express Visual C++( アンマネージドコード ) OpenCV 3.1 |
■OpenCV 基本的な関数一覧 | Top | |
|
画像ファイルの読み込み |
cv::imread() を使用すると画像ファイルを読み込みます。 第2引数でカラータイプを指定します。 IMREAD_UNCHANGED = -1 そのまま読み込む IMREAD_GRAYSCALE = 0, グレースケール読み込み IMREAD_COLOR = 1, 3チャンネルカラー読み込み IMREAD_ANYDEPTH = 2, 深度マップの場合は 16-bit または 32-bit それ以外の場合は 8-bit で読み込み? IMREAD_ANYCOLOR = 4, 任意のカラーマップ? IMREAD_LOAD_GDAL = 8 GDALドライバで読み込み( 後で調べるか ) 対応するファイルフォーマットは以下の通り PNGは確認済。他は気が向いたら後で調べる。 cv::Mat img = cv::imread( "Texture.png", cv::IMREAD_COLOR); |
画像ファイルをウィンドウに表示 |
画像ファイルをウィンドウに表示します。 cv::namedWindow() の第2引数は以下の値の組み合わせを設定します。 cv::WINDOW_NORMAL リサイズ可能なウィンドウ。 cv::WINDOW_AUTOSIZE 画像ファイルのサイズに合わせる。リサイズ不可。 cv::WINDOW_OPENGL OpenGLサポートウィンドウ? cv::WINDOW_FULLSCREEN フルスクリーン表示。他と組み合わせ不可。 cv::WINDOW_FREERATIO リサイズ時の縦横アスペクト比フリー cv::WINDOW_KEEPRATIO CMakeでカスタマイズした場合のみ有効 かもしれない cv::Mat src; // ウィンドウを作成する cv::namedWindow("winName", WINDOW_AUTOSIZE); // 第1引数で指定したウィンドウに画像を表示する cv::imshow("winName", src); |
cv::Mat |
読み込んだ画像データは cv::Mat という行列データに格納されます。 色要素は配列で格納されているが、3チャンネルの場合 RGB ではなく BGR で格納されていることに注意してください。
cv::Mat img, img2; // ピクセルデータの更新 for (int i = 0; i < img.rows; i++) // 高さ { for (int j = 0; j < img.cols; j++) // 幅 { // float型のシングルチャンネル img.at<cv::Vec<float, 1>>(i, j)[0] = 255; } } // ピクセルデータの更新 for (int i = 0; i < img2.rows; i++) // 高さ { for (int j = 0; j < img2.cols; j++) // 幅 { // 1byte 3チャンネル データ( CV_8UC3 ) // 配列要素は BGR でアクセスされる。したがって下記の場合Blue要素の更新となる。 img2.at<cv::Vec3b>(i, j)[0] = 255; } } |
cv::Mat::zeros() |
空の cv::Mat を作成し、zeroクリアします。
cv::Mat src, dst; // src と同じ大きさの画像領域を作成する dst = cv::Mat::zeros(src.rows, src.cols, CV_8UC3); |
cv::mixChannels() |
シングルチャンネルを3チャンネルに変更し、それぞれのチャンネルに元のシングルチャンネルのピクセルデータをコピーします。
cv::Mat src, dst; // src[0] -> dst[2], src[0] -> dst[1], src[0] -> dst[0] // て感じでコピー元インデックスとコピー先インデックスを指定する int fromTo[] = { 0, 2, 0, 1, 0, 0 }; // シングルチャンネルを3チャンネルに増やして、コピーする cv::mixChannels( &src, // コピー元行列 1, // コピー元行列の数 &dst, // コピー先行列 1, // コピー先行列の数 fromTo, // fromTo のペア数 3 ); |