0
由於每個像素存儲器包含每個組件藍色,綠色和紅色的8位。那麼如何將這些組件從Image或Image Matrix中分離出來。 As int Blue = f(Image(X,y)); //(x,y)=類似地,對於紅色和綠色,Image 的像素的座標。 那麼應該是什麼函數f和2D矩陣圖像;如何使用openCV在彩色圖像中分離像素的BGR組件
在此先感謝
由於每個像素存儲器包含每個組件藍色,綠色和紅色的8位。那麼如何將這些組件從Image或Image Matrix中分離出來。 As int Blue = f(Image(X,y)); //(x,y)=類似地,對於紅色和綠色,Image 的像素的座標。 那麼應該是什麼函數f和2D矩陣圖像;如何使用openCV在彩色圖像中分離像素的BGR組件
在此先感謝
首先,你必須經歷的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上最好的書之一。將幫助你很多。