【问题标题】:c++ OpenCV - Create a cv::Mat rectangle with an alpha channelc++ OpenCV - 创建一个带有 alpha 通道的 cv::Mat 矩形
【发布时间】:2022-01-22 11:58:26
【问题描述】:

我希望简单地使用 Creating a simple black image with opencv using cvcreateimage 的答案

#include <opencv2/opencv.hpp>
cv::Mat image(320, 240, CV_8UC3, cv::Scalar(0, 0, 0));

并将其修改为

#include <opencv2/opencv.hpp>
cv::Mat image(320, 240, CV_8UC4, cv::Scalar(0, 0, 0, 255));

这样我以后可以根据需要选择 alpha 值,但这对我不起作用。 我将如何使用 RGB 和 alpha 实例化 cv::Mat?

错误:

./canvas.cpp:31:27: error: expected identifier before numeric constant
   31 |     Scalar backgroundRGBA(255,255,255,255); //of type cv::Scalar
./canvas.cpp:365:34: error: invalid use of non-static member function ‘cv::Scalar vCanvas::backgroundRGBA(int)’
  365 |   Mat bg(width, height, CV_8UC4, backgroundRGBA); //Third argument is supposed to be an 8bit length 4 Scalar
      |                                  ^~~~~~~~~~~~~~
In file included from ./main.cpp:15:
./canvas.cpp:31:12: note: declared here
   31 |     Scalar backgroundRGBA(255,255,255,255); //of type cv::Scalar

谢谢

【问题讨论】:

  • 这不是 OpenCV 而是 C++ 错误。 backgroundRGBA 似乎已经存在,尝试重命名它。或者试试Scalar backgroundRGBA = Scalar::all(255);,如果不行的话。
  • @OliverTale-Yazdi cv::Scalar backgroundRGBA 仅在第 31 行作为类变量声明。我在其中调用它的函数是该类的成员。我刚刚做了一个健全性检查 ctrl-f 并且 backgroundRGBA 只在第 31 行实例化,正如预期的那样。
  • 好吧,您最初发布的代码有效;所以我无法重现错误:cv::Mat image(320, 240, CV_8UC4, cv::Scalar(0, 0, 0, 255));。但看起来你的 backgroundRGBA 是一个函数而不是一个值。
  • @OliverTale-Yazdi 感谢您断言这是有效的。我忘了我不能在类中初始化诸如vector&lt;int&gt; vectorName(4,0);之类的向量。我必须做Scalar backgroundRGBA = Scalar(255,255,255,255);

标签: c++ opencv


【解决方案1】:

这只是我忘记的事情。由于某种原因,您无法初始化诸如

之类的函数
vector<int> vectorName(4,0);

在类构造函数中。

必须使用以下(据称是 c++ 11+)

Scalar backgroundRGBA = Scalar(255,255,255,255);

附带说明,255,255,255 是白色,而不是黑色。哎呀

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2014-06-01
    • 2017-05-30
    • 2016-07-26
    相关资源
    最近更新 更多