【画像認識】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を使った画素値の取得方法を紹介しました。
次回は、別の方法を紹介します。