如何使用openCV知道彩色图像中像素的红色,蓝色和红色分量值?

时间:2012-04-03 13:04:14

标签: opencv

彩色图像的像素值表示红色,绿色,蓝色成分的总和 效果。我想使用opencv提取每个组件的确切值,请提示!

3 个答案:

答案 0 :(得分:1)

全部在OpenCV FAQ Wiki

Suppose, we have 8-bit 3-channel image I (IplImage* img):

I(x,y)blue ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3]
I(x,y)green ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+1]
I(x,y)red ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+2]

你可能还想获得O'Reilly Learning OpenCV的副本并阅读它,如果你打算用OpenCV做任何认真的工作 - 它会在很基本的问题上节省很多时间,比如上方。

答案 1 :(得分:1)

我建议学习opencv c++ api。像素由uchar的向量表示。 如果这是一个彩色图像,那么我们有3个像素的uchar。 Opencv定义typedef Vec<uchar, 3> Vec3b;然后:

//load image
cv::Mat img = cv::imread("myimage.png",1); // 1 means color image
/* Here the cv::Mat can be seen as cv::Mat_<Vec3b>
 * Matrix of uchar with 3 channels for BGR (warning this is not RGB) 
 */
// access to pixel value
cv::Vec3b mypix = img.at<Vec3b>(i,j);
uchar bluevalue = mypix.x;

答案 2 :(得分:1)

此代码将打印像素300、300的红色和蓝色值:

img1 = cv2.imread('Image.png', cv2.IMREAD_UNCHANGED)
b,g,r = (img1[300, 300])
print (r)
print (b)