ホームページ > バックエンド開発 > C++ > OpenCV で Mat イメージのピクセル チャネル値にアクセスするにはどうすればよいですか?

OpenCV で Mat イメージのピクセル チャネル値にアクセスするにはどうすればよいですか?

DDD
リリース: 2024-11-25 01:46:14
オリジナル
157 人が閲覧しました

How do you access pixel channel values in a Mat image in OpenCV?

OpenCV でマット イメージからピクセル チャネル値を抽出する

OpenCV では、マット イメージ内のピクセル値にアクセスして操作する方法がいくつかあります。一般的なシナリオの 1 つは、特定のピクセルのチャネル値を取得することです。

Vec3b を使用

画像が CV_8UC3 形式で保存されている場合、これは 8 ビット符号なし整数で 3 チャネルの画像を表します値 (BGR) を使用すると、Vec3b データ型を使用して個々のチャネルにアクセスできます。たとえば、foo がこのタイプの Mat イメージである場合、次のコードを使用してピクセルを反復処理できます。

for (int i = 0; i < foo.rows; i++)
{
    for (int j = 0; j < foo.cols; j++)
    {
        Vec3b bgrPixel = foo.at<Vec3b>(i, j);
        
        // Access the pixel's BGR values...
    }
}
ログイン後にコピー

ダイレクト データ バッファー アクセスの使用

パフォーマンス上の理由から、次のコードを使用できます。データ バッファーにアクセスしてピクセル値に直接アクセスすることもできます。これによりアクセスが高速化されますが、データ変換とチャネル オフセットの手動処理がさらに必要になります。これを行う方法の例を次に示します。

uint8_t* pixelPtr = (uint8_t*)foo.data;
int cn = foo.channels();
Scalar_<uint8_t> bgrPixel;

for (int i = 0; i < foo.rows; i++)
{
    for (int j = 0; j < foo.cols; j++)
    {
        bgrPixel.val[0] = pixelPtr[i*foo.cols*cn + j*cn + 0]; // B
        bgrPixel.val[1] = pixelPtr[i*foo.cols*cn + j*cn + 1]; // G
        bgrPixel.val[2] = pixelPtr[i*foo.cols*cn + j*cn + 2]; // R
        
        // Access the pixel's BGR values...
    }
}
ログイン後にコピー

代わりに

次のように、row() メソッドを使用して画像の個々の行にアクセスすることもできます。コード:

int cn = foo.channels();
Scalar_<uint8_t> bgrPixel;

for (int i = 0; i < foo.rows; i++)
{
    uint8_t* rowPtr = foo.row(i);
    for (int j = 0; j < foo.cols; j++)
    {
        bgrPixel.val[0] = rowPtr[j*cn + 0]; // B
        bgrPixel.val[1] = rowPtr[j*cn + 1]; // G
        bgrPixel.val[2] = rowPtr[j*cn + 2]; // R

        // Access the pixel's BGR values...
    }
}
ログイン後にコピー

OpenCV はピクセル値を RGB ではなく BGR 形式 (青、緑、赤) で保存することに注意してください。チャンネルにアクセスするときは、その点に注意する必要があります。

以上がOpenCV で Mat イメージのピクセル チャネル値にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート