Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用openCV知道彩色图像中像素的红色、蓝色和红色分量值?_Opencv - Fatal编程技术网

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

如何使用openCV知道彩色图像中像素的红色、蓝色和红色分量值?,opencv,Opencv,彩色图像的像素值表示红色、绿色和蓝色分量的总和 效果。我想使用opencv提取每个组件的精确值,请建议 一切都在: 如果您打算使用OpenCV进行任何严肃的工作,您可能还想获得一份O'Reilly的副本并阅读它-这将节省大量时间解决上述非常基本的问题。全部内容如下: 如果您打算使用OpenCV进行任何严肃的工作,您可能还想获得一份O'Reilly的副本并阅读它——这将节省大量时间解决上述非常基本的问题。我建议您学习。像素由uchar向量表示。 如果这是一个彩色图像,那么我们有3个像素。 Open

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

一切都在:

如果您打算使用OpenCV进行任何严肃的工作,您可能还想获得一份O'Reilly的副本并阅读它-这将节省大量时间解决上述非常基本的问题。

全部内容如下:

如果您打算使用OpenCV进行任何严肃的工作,您可能还想获得一份O'Reilly的副本并阅读它——这将节省大量时间解决上述非常基本的问题。

我建议您学习。像素由uchar向量表示。 如果这是一个彩色图像,那么我们有3个像素。 Opencv定义
typedef-Vec-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;
//加载图像
cv::Mat img=cv::imread(“myimage.png”,1);//1表示彩色图像
/*在这里,cv::Mat可以被视为cv::Mat_
*带3个BGR通道的uchar矩阵(警告:这不是RGB)
*/
//获取像素值
cv::Vec3b mypix=在(i,j)处的img;
uchar bluevalue=mypix.x;
我建议学习。像素由uchar向量表示。 如果这是一个彩色图像,那么我们有3个像素。 Opencv定义
typedef-Vec-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;
//加载图像
cv::Mat img=cv::imread(“myimage.png”,1);//1表示彩色图像
/*在这里,cv::Mat可以被视为cv::Mat_
*带3个BGR通道的uchar矩阵(警告:这不是RGB)
*/
//获取像素值
cv::Vec3b mypix=在(i,j)处的img;
uchar bluevalue=mypix.x;

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

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

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

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

一本更新过的书会是这样的。@卡利菲利普:即使这本书似乎也得到很多负面评论,认为它过时了。我想这很大程度上取决于你是想使用旧的C API还是更新的和更可变的C++ API。因为RGB组件被存储在像素存储器中,作为每个字节的8位通道。我使用下面的代码来获取单个组件RGB的值。请为(i=0;i>16);//获取红色分量int g=0xff&(pixel>>8);//获取绿色分量int b=0xff&(像素)K.L.菲利普:即使是这本书也会得到很多负面评论,认为它已经过时了。我想这很大程度上取决于你是否想使用旧的C API或者更新的、更可变的C++ API。因为RGB组件被存储在像素存储器中,作为每个8位的通道。我使用F。以下代码用于获取单个组件RGB的值。请建议(i=0;i>16);//获取红色分量intg=0xff&(像素>>8);//获取绿色分量intb=0xff&(像素);//获取蓝色分量;因为RGB分量作为8位通道存储在像素内存中,每个(i=0;i>16);//获取红色分量g=0xff&(像素>>8);//获取绿色分量b=0xff&(像素);//获取蓝色分量我已经将代码编写为:int main(int argc,char*argv[]){IplImage*img=cvLoadImage(“I.jpg”);int-nl=img->height;//行数int-nc=img->width*img->nChannels;//每行元素总数int-step=img->widthStep;//有效宽度int-channel=img->nChannels;//加载图像cv::Mat\uimg1=cv::imread(“myimage.png”,1);//1表示彩色图像//访问像素值cv::Vec3b mypix=img1.at(5,5);uchar bluevalue=mypix.x;返回0;}然后在函数“int main(int,char**)中获取错误aserror作为-load_im.cpp:“:错误:“Vec3b”未在此范围内声明注意:建议的备选方案:/usr/include/opencv/cxcore.hpp:248:23:注意:“cv::Vec3b”load_im.cpp:15:16:错误:模板参数1无效load_im.cpp:15:23:错误:在“=”令牌load_im.cpp:15:51”之前声明中的类型无效。错误:无法将“cv::Mat”转换为“int”'在初始化加载\u im.cpp:18:25:error:request for member'at'in'img1',它是非类类型'int'加载\u im.cpp:19:26:error:'cv::Vec3b'没有名为'x'的成员请给出一个演示代码,以便从OpenCVB中的彩色图像像素中分别提取R、G、B值,因为RGB组件作为8b存储在像素内存中它为每个通道(i=0;i>16);//获取红色分量g=0xff&(pixel>>8);//获取绿色分量b=0xff&(pixel);//获取蓝色分量我已经将代码编写为:int main(intargc,char*argv[]){IplImage*img=cvLoadImage(“I.jpg”);int-nl=img->height;//行数int-nc=img->width*img->nChannels;//每行元素总数int-step=img->widthStep;//有效宽度int-channel=img->nChannels;//加载图像cv::Mat\uimg1=cv::imread(“myimage.png”,1);//1表示彩色图像//访问像素值cv::Vec3b mypix=img1.at(5,5);uchar bluevalue=mypix.x;返回0;}然后获取