2012-04-04 173 views
0

由於每個像素存儲器包含每個組件藍色,綠色和紅色的8位。那麼如何將這些組件從Image或Image Matrix中分離出來。 As int Blue = f(Image(X,y)); //(x,y)=類似地,對於紅色和綠色,Image 的像素的座標。 那麼應該是什麼函數f和2D矩陣圖像;如何使用openCV在彩色圖像中分離像素的BGR組件

在此先感謝

回答

1

首先,你必須經歷的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++風格的支持) 你可以使用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上最好的書之一。將幫助你很多。

相關問題