C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++とOpenCVでシングルチャンネル画像のピクセル値を読み取る方法

ピクセル値を読み取る仕組み

デジタル画像は無数のピクセル(画素)から構成されています。OpenCVを使えば、これらのピクセル値を簡単に読み取ることができます。ただし、カラー画像はBGRの3つのチャンネルを持っているため、ピクセル値を正確に取得したい場合は、単一チャンネル(シングルチャンネル)として個別に扱う必要があります。

本記事では、まず「cimage」という名前のMat行列に画像を読み込み、cvtColor(cimage, img, COLOR_BGR2GRAY); 関数を使ってグレースケール画像へ変換し、その結果を「img」という名前の行列に格納します。グレースケール化によって画像が単一チャンネルになるため、img.at<uchar>(i, j) のようにアクセスするだけで、任意の位置のピクセル値(0〜255の輝度値)を取得できるようになります。

以下のプログラムは、画像の全ピクセル値を読み取り、その値をコンソールウィンドウに表示します。

サンプルコード

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
    int x;// ピクセル値を保持するための整数変数を宣言 //
    Mat cimage = imread("colors.jpg");// 画像を読み込む //
    Mat img;// 変換後の画像を格納する空の行列を宣言 //
    cvtColor(cimage, img, COLOR_BGR2GRAY);// 読み込んだ画像をグレースケール画像に変換 //
    for (int i = 0; i < img.rows; i++)// 行方向のループ // {
        for (int j = 0; j < img.cols; j++)// 列方向のループ // {
            x = (int)img.at<uchar>(i, j);// (i,j)ピクセルの値を変数に格納 //
            cout << "Value of pixel" << "(" << i << "," << j << ")" << "=" << x << endl;// コンソールウィンドウに値を表示 //
        }
    }
    imshow("Show", img);// 画像を表示 //
    waitKey();// キーボード入力を待機 //
    return 0;
}

実行結果

このプログラムを実行すると、画像内のすべてのピクセルについて「Value of pixel (行, 列) = 値」の形式で輝度値がコンソールに出力されるとともに、変換後のグレースケール画像が別ウィンドウに表示されます。

C++とOpenCVでシングルチャンネル画像のピクセル値を読み取る方法

ポイント解説

  • imread():指定したパスから画像ファイルを読み込み、Matオブジェクトとして返します。
  • cvtColor():カラー空間を変換する関数です。COLOR_BGR2GRAYを指定すると、BGRカラー画像からグレースケール画像へ変換できます。
  • at<uchar>(i, j):グレースケール画像は1ピクセルあたり1バイト(uchar型)で表現されるため、このテンプレート関数でi行目・j列目のピクセル値に直接アクセスできます。
  • waitKey():キーボードからの入力があるまでプログラムを待機させ、表示ウィンドウを閉じずに保持します。

  1. C++とOpenCVでバイナリ画像(二値画像)を作成する方法を解説

    バイナリ画像(二値画像)とは、黒と白の2色のみで表現されるデジタル画像のことです。画像処理の観点から見ると、バイナリ画像は「0」と「1」という2つの値しか持たないピクセルで構成されています。ピクセルの値が0の場合は純粋な黒を、値が1の場合は純粋な白を表します。グレースケール画像では、各ピクセルが256段階の異なる値を持つのに対し、バイナリ画像では2つの値しか存在しません。このシンプルさゆえに、バイナリ画像はさまざまな用途で活用されています。例えば、モルフォロジー変換(形態学的処理)ではバイナリ画像が必要であり、背景から物体の形状を抽出する処理にもバイナリ画像が用いられます。OpenCVを使用す

  2. C++とOpenCVで画像のチャンネル数を取得する方法を解説

    この記事では、OpenCVを使って画像のチャンネル数を調べる方法について解説します。プログラムを実行すると、コンソール画面に画像のチャンネル数が表示されます。チャンネル数を取得するには、OpenCVが提供するchannels()メソッドを使用します。このメソッドは、Matクラスのオブジェクト(画像行列)に対して呼び出すことで、その画像のチャンネル数を整数値として返します。例えば、カラー画像の場合は通常3チャンネル(BGR)、グレースケール画像の場合は1チャンネルとなります。画像処理を行う際、扱っている画像がカラーかモノクロかを判別するために、チャンネル数の確認は非常に重要な処理の一つです。以下