彩色图像的像素值表示红色,绿色,蓝色成分的总和 效果。我想使用opencv提取每个组件的确切值,请提示!
答案 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)