2012-04-04 10 views
0

各ピクセルメモリには青、緑、赤の各コンポーネントごとに8ビットが含まれているためです。では、どうやってイメージやイメージマトリックスからこれらのコンポーネントを分けることができますか? int Blue = f(Image(X、y)); //(x、y)=同様に赤と緑の画像 のピクセルの座標。 関数fと2D行列Imageとする必要があります。事前にopenCVを使用してカラー画像のピクセルのBGRコンポーネントを分離する方法

おかげ

答えて

1

まず第一に、あなたは、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つです。あなたを大いに助けます。

関連する問題