各ピクセルメモリには青、緑、赤の各コンポーネントごとに8ビットが含まれているためです。では、どうやってイメージやイメージマトリックスからこれらのコンポーネントを分けることができますか? int Blue = f(Image(X、y)); //(x、y)=同様に赤と緑の画像 のピクセルの座標。 関数fと2D行列Imageとする必要があります。事前にopenCVを使用してカラー画像のピクセルのBGRコンポーネントを分離する方法
おかげ
各ピクセルメモリには青、緑、赤の各コンポーネントごとに8ビットが含まれているためです。では、どうやってイメージやイメージマトリックスからこれらのコンポーネントを分けることができますか? int Blue = f(Image(X、y)); //(x、y)=同様に赤と緑の画像 のピクセルの座標。 関数fと2D行列Imageとする必要があります。事前にopenCVを使用してカラー画像のピクセルのBGRコンポーネントを分離する方法
おかげ
まず第一に、あなたは、OpenCVのの基礎を通過し、画像処理の他の部分に向けて、あなたの目を向ける必要があります。何を聞いてかなり基本的であり、あなたがRGBにアクセスするには、
cv::Mat img = Read the image off the disk or do something to fill the image.
をOpenCVの2.1以上を使用すると仮定して
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つです。あなたを大いに助けます。