gpt4 book ai didi

c++ - 初始化多 channel OpenCV Mat

转载 作者:行者123 更新时间:2023-11-28 04:19:08 25 4
gpt4 key购买 nike

我必须初始化一个多 channel OpenCV 矩阵。我正在创建这样的多 channel 矩阵

cv::Mat A(img.size(), CV_16SC(levels));

其中 levels 是矩阵中的 channel 数,可以是 20 - 300 之间的任何值。除了零之外,我无法初始化此矩阵。

如果我这样初始化矩阵

cv::Mat A(img.size(), CV_16SC(levels), Scalar(1000));

我收到一条错误消息,指出“在 cv::scalarToRawData 中断言失败 (cn <= 4)”。这似乎我们最多只能初始化 4 个 channel 的值

OpenCV 中是否有其他可用的方法来初始化这个多 channel 矩阵,或者我必须手动初始化这些值?

编辑:我已完成以下操作来初始化此多 channel 矩阵。希望这对遇到同样问题的人有所帮助

for (int j = 0; j < img.rows; ++j) for (int i = 0; i < img.cols; ++i)
{
short *p = A.ptr<short>(j) +(short)i*levels;
for (int l = 0; l < levels; ++l)
{
p[l] = 1000;
}
}

最佳答案

我试图使用 OpenCV 的 Vec_Mat_ 模板类,因为这个 Mat_构造函数。不幸的是,我找不到可行的解决方案。所有尝试都会导致相同的错误,您已经遇到过。因此,我的猜测是,底层 OpenCV 实现不支持此类操作,即使是在自定义派生类型上也是如此。

当然,您有自己的想法来解决这个问题。尽管如此,我想提供我能想到的最短(并且希望最有效)的解决方案:

const int levels = 20;
const cv::Size size = cv::Size(123, 234);

const cv::Mat proto = cv::Mat(size, CV_16SC1, 1000);

std::vector<cv::Mat> channels;
for (int i = 0; i < levels; i++)
channels.push_back(proto);

cv::Mat A;
cv::merge(channels, A);

关于c++ - 初始化多 channel OpenCV Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55861072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com