C++ - 可以在 OpenCV 中使用 Vec3b 的一点解释

Posted

技术标签:

【中文标题】C++ - 可以在 OpenCV 中使用 Vec3b 的一点解释【英文标题】:C++ - Could use a little explanation of Vec3b in OpenCV 【发布时间】:2014-03-10 19:37:56 【问题描述】:

我遇到了这个'Vec3b green(0,255,0), blue (255,0,0);'在某些代码中,我正在转换为另一种语言。我是 C++ OpenCV 的新手,想知道它在文档中的位置,我到处搜索却找不到它。我还 grepped 了整个 OpenCV 目录,发现这是最接近它的定义

'typedef Vec3b RGB;'

在 /home/w/Documents/opencv-master/modules/imgproc/test/test_cvtyuv.cpp 文件中

我对 RGB 进行了搜索,但也找不到关于它的定义,尽管它有很多输出,我可能错过了一些东西。我正在编写一个 C 包装器,这就是我需要知道的原因,到目前为止,我有这个来包装上面的 'Vec3b green(0,255,0)':

 Vec3b cv_create_Vec3b(const char* color, int val1, int val2, int val3) 
     return new Vec3b color (val1, val2, val3);
 

但是得到这个错误:

 opencv_generated.cpp:8:22: error: expected ‘;’ before ‘color’
      return new Vec3b color (val1, val2, val3);
                  ^
opencv_generated.cpp:8:45: error: ‘color’ cannot be used as a function
     return new Vec3b color (val1, val2, val3);

首先,我可以使用帮助来了解如何键入 "color" 。它只需要一个变量,当它运行时输入的任何内容都是“绿色”或“蓝色”(C++ 的新手)..其次,如果有人可以指出我或告诉我有关它的信息或向我展示关于它的声明所以我有足够的信息来写我的包装我会很感激。

谢谢 ^

【问题讨论】:

您的问题并非特定于 Vec3b,而是特定于 C++。花一些时间学习该语言的基础知识是值得的。 @juanchopanza 请查看对 Arshia001 的最新评论 您的代码在很多方面都被我们的语法弄乱了,以至于您的函数的预期语义不清楚。 @ juanchopanza 请在这里查看我的新问题***.com/questions/22311634/…,非常感谢您这么快回复我=) 【参考方案1】:

我在另一个 S.O. 中找到了如何做到这一点。邮政。请看cmets

这里https://***.com/questions/22311634/c-help-writing-function-parameters-for-c-wrappers-for-c

Vec3b* cv_create_Vec3b(int val1, int val2, int val3) 
   return new Vec3b (val1, val2, val3);

【讨论】:

【参考方案2】:

Vec3b 是一种类型(在我看来就像一个颜色值),“green”和“blue”是变量名。您不能将变量名称存储在字符串中(显然),因此您不能拥有生成这些值的函数。此外,您的函数在语法上是错误的。虽然我不明白你将如何为 c++ 项目编写 c 包装器(如果它的一部分是在 c++ 中,你需要一个 c++ 编译器,那有什么意义呢?),我绝对建议你在尝试任何事情之前先学习 c++用它。语法的可能性太广泛了,不能在阅读代码时自己学习。

编辑:也许尝试这样的事情?

Vec3b Green() 
    Vec3b result(0, 255, 0);
    return result;

【讨论】:

@感谢您的回复....我已经红了一本关于 C++ 的书,并且掌握了大量的语言,我尝试用谷歌搜索其余的...这就是我使用 S.O. 的原因。 ,当我在我的文本或谷歌上找不到答案时......有没有办法可以帮助我找出如何完成这个特定任务(定义一个参数来代表绿色并为 Vec3b 功能提供绿色在我的包装器中)..我正在编写的很多代码都取决于它......我还问了这个问题,所以我可以让别人告诉我有关 Vec3b 的信息,因为它似乎并不容易在线获得或至少将我引导至资源。 嗯,从我所见,Vec3b 并没有什么特别之处,它只是一个 3 字节的颜色值。我想知道的是,“包装器”到底是什么意思?如何在不支持 OO 的情况下将面向对象的代码包装成一种语言?无论如何,您可以尝试类似我添加到答案中的代码。不知道这是不是你想要的……

以上是关于C++ - 可以在 OpenCV 中使用 Vec3b 的一点解释的主要内容,如果未能解决你的问题,请参考以下文章

opencv4opencv视频教程 C++ 5读写图像imreadimwrite读写像素at<>()修改像素值ROI区域选择(图像裁剪)RectVec3b与Vec3FCV_32F)

opencv:从RGB到灰度的转换只得到蓝色

在 OpenCV 中应用蒙版

OpenCV(C++)图像处理基础05:图像的亮度与对比度

opencv4opencv视频教程 C++ 6图像混合线性混合混合权重相加addWeighted()混合加add()混合乘multiply()

OpenCV学习笔记——疑问