Qstairs

現役AIベンチャーCTOの知見、画像認識(人工知能、Deep Learning)を中心とした技術ノウハウをアップしていきます

広告

【画像認識】C++ OpenCV 指定した画素の画素値取得

OpenCVで入力した画像の指定画素の画素値を取得する方法を紹介します。

開発環境は以下です。

  • Windows10 64bit
  • VisualStudio Community
  • OpenCV3.1.0

開発環境の構築方法はここをご参考ください。


早速、ソースコードです。

// OpenCVTest.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

// opencvの処理を使いますと宣言
#include "opencv2\opencv.hpp"

// cvという苗字を省略しますと宣言
using namespace cv;
// stdという苗字を省略しますと宣言
using namespace std;

// プログラムの処理はmainから始まる
int main()
{
	// 画像を読み込む プロジェクトフォルダにコピーしたlena.jpgを参照
	Mat testImage = imread("lena.jpg", 1);	// カラーで読み込む

	// 画像の座標(0,0)の画素値を取得する
	Vec3b pix = testImage.at<Vec3b>(Point(0, 0));

	// 画素値はBGRの順に格納されている
	cout << (int)pix[0] << "," << (int)pix[1] << "," << (int)pix[2] << endl;

    return 0;
}


画素の画素値を取得する方法はいろいろあるのですが、
今回はMatクラスのat関数を使用しました。
これが一番簡単に取得できると思います。

この方法の肝は、Vec3bです。
Vec3bとは何かというと、
「uchar型の値を3つ格納する変数」
といったところでしょうか。

さらに、uchar型とは何かというと、
「0-255の数値を格納できる箱」
となります。
つまり、Vec3b
「0-255の数値を格納できる箱を3つ格納する変数」
となります。

では、なぜ0-255なのでしょうか。
それは、画像の色を決めるRGB(RED, GREEN, BLUE)は
それぞれ256通りで表現されるからです。
Rが256通り、Gが256通り、Bが256通り
これをVec3bで表現しているということです。


今回はatを使った画素値の取得方法を紹介しました。
次回は、別の方法を紹介します。

広告