【问题标题】:Taking R,G,B individually from a <cv::vec3b> vector从 <cv::vec3b> 向量中分别获取 R,G,B
【发布时间】:2014-10-28 00:38:48
【问题描述】:

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

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 值?

【问题讨论】:

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


    【解决方案1】:

    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 并接受了你的答案。谢谢。不知道 .val[] 的事情。今天学到了一些东西(:
    • 大家好,快速提问。可以从 v_char.val[2] 或 v_char.val[0] 访问红色值吗?
    • v_char.val[2] 因为 OpenCV 会加载 BGR 格式的图像。
    【解决方案2】:

    不知道你的数据结构很难知道,但很可能是这样的。

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

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

    【讨论】:

    • 不。它不起作用。实际上,向量 v_char 只是存储图像的一行的值。例如:我想找到并打印出可以在 v_char 向量中找到的特定行的所有 r 值。我可以使用 for 循环,但如何仅声明 r 值?
    • 无论如何都要为你+1,但希望你现在知道我的意思并能够帮助我。谢谢。
    • 你是在问 OpenCV 是否有内置的东西可以让你免于编写 for 循环?
    • 不。我正在尝试做类似“r = image.at<:vec3b>(i,j)[2];”的事情但是对于矢量,但我无法获得正确的格式:/
    • 类似 v_char[i].at<:vec3b>[2];但它的格式错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多