分别从<cv :: vec3b> vector </cv :: vec3b>中取R,G,B

时间:2014-02-22 06:39:53

标签: c++ opencv image-processing computer-vision

为了使我的问题更清楚,请查看代码。

vector<cv::Vec3b> v_char; // the vector that I am storing my r,g,b values, or b,g,r in this case since it's opencv.

我知道打印出使用值的价值,我可以直接从图像中取出,就像这样。

b = image.at<cv::Vec3b>(i,j)[0];
g = image.at<cv::Vec3b>(i,j)[1];
r = image.at<cv::Vec3b>(i,j)[2];

然而,没有使用图像(想象图像消失了),我只想要来自矢量的值v_char,其中所有的图像值都已存储,比如说,我只想要r值,我该如何检索它?试图在互联网上搜索并玩弄代码,但无济于事(

编辑:更多细节 向量v_char只是存储图像的一行的值。例如:我想找到并打印出可以在v_char向量中找到的特定行的所有r值。我可以使用for循环,但是如何仅声明r值?

2 个答案:

答案 0 :(得分:5)

Vec3b v_char本身是3个值的向量,可以first values = v_char.val[0]second values = v_char.val[1]third values = v_char.val[2]访问。由于您只需要red值,因此只需访问整个向量的v_char.val[0]中的所有值。

所以通过for loop尝试获取所有值:

v_char[i].val[0]; // "i" represents the index of "for loop" for a given row

答案 1 :(得分:1)

在不知道您的数据结构的情况下很难知道,但很可能是这样的。

假设j是行索引,i是列索引,行的步幅整齐排列。

auto &px = v_char[j * width + i];