2012-04-04 4 views
0

각 픽셀 메모리에는 파란색, 녹색 및 빨간색 각 구성 요소에 대해 8 비트가 포함되어 있습니다. 그렇다면이 구성 요소를 이미지 또는 이미지 행렬과 어떻게 분리 할 수 ​​있습니까? int Blue = f (Image (X, y)); // (x, y) = 마찬가지로 이미지의 픽셀 좌표입니다. 그래서 함수 f와 2D 행렬 Image가 있어야합니다; 사전openCV를 사용하여 컬러 이미지에서 픽셀의 BGR 구성 요소를 분리하는 방법

답변

1

우선의

감사합니다, 당신은 OpenCV의 기본 사항을 통해 이동 및 이미지 처리의 다른 부분으로 관심을 설정해야합니다. 당신이 요청하는

cv::Mat img = Read the image off the disk or do something to fill the image. 

은 RGB가
img.at<cv::Vec3b>(x,y); 

값하지만 BGR입니다 역의 값을 줄 것이다 액세스하려면 아주 기본적인 당신이 OpenCV의 2.1을 사용하여 높은됩니다 가정입니다. 그래서 이것을 메모 해 두십시오. 기본적으로 액세스되는 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에서 최고의 책 중 하나입니다. 많이 도와 드리겠습니다.

관련 문제