c++ opencv Vec3b
时间: 2023-09-10 21:11:23 浏览: 148
C++OpenCV3源代码轮廓查找基础
在OpenCV中,Vec3b是一个用于表示三通道像素值的数据类型。它是一个由3个无符号字符组成的向量,每个元素代表了一个通道的像素值。Vec3b通常用于处理彩色图像的像素值。
下面是一个使用Vec3b的示例代码,用于将一个彩色图像的像素值转换为灰度值:
```
Mat img_color = imread("image.jpg", 1);
Mat img_gray(img_color.rows, img_color.cols, CV_8UC1);
for (int i = 0; i < img_color.rows; i++) {
for (int j = 0; j < img_color.cols; j++) {
Vec3b pixel = img_color.at<Vec3b>(i, j);
int gray_value = 0.21 * pixel[2] + 0.72 * pixel[1] + 0.07 * pixel[0];
img_gray.at<uchar>(i, j) = gray_value;
}
}
```
在这个例子中,我们首先载入一张彩色图像,然后创建一个与它大小相同的灰度图像。接着,我们使用两个for循环遍历彩色图像中的每个像素,从中提取出红、绿、蓝三个通道的像素值,然后根据公式 0.21R + 0.72G + 0.07B 计算出对应的灰度值,并将其赋值给灰度图像中对应的像素位置。注意,我们使用了at函数来访问像素值,其中模板参数指定了像素值的数据类型。在这个例子中,灰度图像的像素值是8位无符号整型(CV_8UC1),而彩色图像的像素值是3个8位无符号整型组成的向量(Vec3b)。
以上就是一个简单的使用Vec3b的例子,它展示了如何处理彩色图像的像素值并将其转换为灰度值。
阅读全文