OpenCV Mat 表現からピクセル チャネル値を取得する
OpenCV Mat イメージ内の特定のピクセルのチャネル値を取得するには、以下を利用できます。次のメソッド:
方法 1: OpenCV を使用するVec3b
3 つのチャネル (青、緑、赤) を含む CV_8UC3 タイプの Mat イメージの場合、Vec3b データ構造を使用できます。
for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Access individual channel values: uint8_t blue = bgrPixel[0]; uint8_t green = bgrPixel[1]; uint8_t red = bgrPixel[2]; } }
メソッド2: ダイレクト バッファ アクセス
パフォーマンスを向上させるため、画像データ バッファに直接アクセスします利用できます:
uint8_t* pixelPtr = (uint8_t*)foo.data; int cn = foo.channels(); // Number of channels per pixel for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { // Retrieve channel values: uint8_t blue = pixelPtr[i*foo.cols*cn + j*cn + 0]; uint8_t green = pixelPtr[i*foo.cols*cn + j*cn + 1]; uint8_t red = pixelPtr[i*foo.cols*cn + j*cn + 2]; } }
注: OpenCV は内部的にピクセル データを RGB ではなく BGR (青、緑、赤) 形式で保存します。
以上がOpenCV Mat イメージのピクセル チャネル値に効率的にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。