【发布时间】: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<int> vectorName(4,0);之类的向量。我必须做Scalar backgroundRGBA = Scalar(255,255,255,255);