各ピクセル メモリには、青、緑、赤の各コンポーネントに対して 8 ビットが含まれているためです。では、これらのコンポーネントを Image または Image Matrix から分離するにはどうすればよいでしょうか。As int Blue = f(Image(X,y));// (x,y) = 同様に、赤と緑の画像のピクセルの座標。では、関数 f と 2D マトリックス Image はどうあるべきか。
前もって感謝します
各ピクセル メモリには、青、緑、赤の各コンポーネントに対して 8 ビットが含まれているためです。では、これらのコンポーネントを Image または Image Matrix から分離するにはどうすればよいでしょうか。As int Blue = f(Image(X,y));// (x,y) = 同様に、赤と緑の画像のピクセルの座標。では、関数 f と 2D マトリックス Image はどうあるべきか。
前もって感謝します
まず、OpenCV の基本を理解してから、画像処理の他の部分に注意を向ける必要があります。あなたが求めているのはかなり基本的なもので、OpenCV 2.1 以降を使用すると仮定すると、
cv::Mat img = Read the image off the disk or do something to fill the image.
RGB 値にアクセスするには
img.at<cv::Vec3b>(x,y);
しかし、BGR である逆の値を与えるでしょう。したがって、これに注意してください。基本的にアクセスされる cv::Vec3b タイプ。
img.at<cv::Vec3b>(x,y)[0];//B
img.at<cv::Vec3b>(x,y)[1];//G
img.at<cv::Vec3b>(x,y)[2];//R
また
Vec3f pixel = img.at<Vec3f>(x, y);
int b = pixel[0];
int g = pixel[1];
int r = pixel[2];
画像を RGB チャンネルに分割すると、次のように使用できます。
現在、OpenCV のプリミティブ C スタイルに (C および C++ スタイルがサポートされています) cvSplit 関数を使用できます。
IplImage* rgb = cvLoatImage("C://MyImage.bmp");
//now create three single channel images for the channel separation
IplImage* r = cvCreateImage( cvGetSize(rgb), rgb->depth,1 );
IplImage* g = cvCreateImage( cvGetSize(rgb), rgb->depth,1 );
IplImage* b = cvCreateImage( cvGetSize(rgb), rgb->depth,1 );
cvSplit(rgb,b,g,r,NULL);
OpenCV 2 CookBookは、OpenCV に関する最高の書籍の 1 つです。大いに役立ちます。