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
   );
       

inserted by FC2 system