gpt4 book ai didi

c++ - OpenCV C++ 使用高斯核函数计算晕影效果

转载 作者:行者123 更新时间:2023-11-28 02:13:36 36 4
gpt4 key购买 nike

我尝试转换 this reply从 python 到 C++,我被困在第一次调用 multiply ......small 是我的输入垫,有 2 个暗淡和大约 600x400 列/行。

Mat a = getGaussianKernel(small.cols, .3);
Mat b = getGaussianKernel(small.rows, .3);
Mat ta;
transpose(a, ta);
Mat c = *new Mat(ta.rows, ta.cols, ta.type());
cv::multiply(ta, b, c);
Mat d;
cv::max(c, d);
d = c / d;
Mat e;
multiply(small, d, e);

错误信息如下:

The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function arithm_op

我对 numpy 或 matplotlib 都不熟悉,但由于解释冗长的原因,我只能使用 C++...

最佳答案

如果您阅读 documentation对于 cv::multiply,您会看到它期望前两个输入具有相同的大小和类型。这是因为它正在尝试进行逐元素乘法

您的高斯内核 a 被定义为 600 x 1(getGaussianKernel 建议第一个输入为奇数)因此转置 ( ta) 将是 1 x 600。

第二个输入,b 被定义为 400 x 1(同样,应该是一个奇数大小)。

显然这两个尺寸/尺寸不同。

而不是使用 cv::multiply 这是逐元素乘法,你会想只使用 * 运营商这是 matrix product你可能想要的。

Mat C = b * ta

这应该会产生一个 400 x 600 的矩阵。

此外,我调换了 bta 的顺序,以便矩阵维度可以进行乘法计算。

注意您的代码还有一些其他问题。您正在使用 cv::max() 将空矩阵与 c 进行比较。您可能应该使用 cv::minMaxLoc .

你最后一行的乘法看起来应该没问题,因为你想在逐个像素或逐个元素的基础上将高斯图像的组合直接应用于输入图像。

关于c++ - OpenCV C++ 使用高斯核函数计算晕影效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819785/

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