C++ Matlab的等效函数&x27;OpenCV中的s过滤器2

C++ Matlab的等效函数&x27;OpenCV中的s过滤器2,c++,matlab,opencv,C++,Matlab,Opencv,我需要将下面的matlab代码转换为OpenCV,并获得完全相同的结果 在matlab中: A = [1 2 3]; f = [4 5 6]; result = filter2(f, A); 其结果如下: result = [17 32 23] 在OpenCV中,我尝试了以下几行: cv::Mat A = (cv::Mat_<float>(1, 3) << 1, 2, 3); cv::Mat f = (cv::Mat_<float>(1, 3)

我需要将下面的matlab代码转换为OpenCV,并获得完全相同的结果

在matlab中:

A = [1 2 3];
f = [4 5 6];
result = filter2(f, A);
其结果如下:

result = [17    32    23]
在OpenCV中,我尝试了以下几行:

cv::Mat A = (cv::Mat_<float>(1, 3) << 1, 2, 3);
cv::Mat f = (cv::Mat_<float>(1, 3) << 4, 5, 6);
cv::Mat result;
cv::filter2D(A, result, -1, f, cv::Point(-1, -1), 0, cv::BORDER_REPLICATE);

如何获得与Matlab相同的结果??我怀疑OpenCV中的锚点会导致这种差异,但我不知道如何改变它。提前谢谢

使用
cv::BORDER_常量
,它用零填充数组,而不是复制相邻元素:

cv::filter2D(A, result, -1, f, cv::Point(-1, -1), 0, cv::BORDER_CONSTANT);
结果是:

result = [17, 32, 23]

使用
cv::BORDER_常量
,它将数组填充为零,而不是复制相邻元素:

cv::filter2D(A, result, -1, f, cv::Point(-1, -1), 0, cv::BORDER_CONSTANT);
结果是:

result = [17, 32, 23]

您将
ddepth
参数保留为-1,即与src相同,您是否尝试更改为
CV_64F
?我尝试过,但它给我错误提示“源格式(=5)和目标格式(=6)的组合不受支持”。您将
ddepth
参数保留为-1,即与src相同,您是否尝试更改为
CV_64F
?我尝试过,但它给我错误提示“源格式(=5)和目标格式(=6)的组合不受支持”。这正是我要发布的内容+1.@rayryeng谢谢,我希望我能拿出一些文档来支持这一观察结果,但在Matlab和OpenCV方面都严重缺乏:(对于MATLAB来说,这意味着边界是零填充的:。如果你看
valid
标志,它会告诉你边界是零填充的,但实际上它不会告诉你它是在
valid
标志之外进行的。我猜它实际上与你使用的标志无关,并且取决于该标志,一些元素删除了所有内容。零填充仍然完成。对于OpenCV:-它告诉您默认值是
BORDER\u default
,它确实执行零填充。@rayryeng我明白您对Matlab的
valid
标志的意思,但是如果我使用
BORDER\u default
我得到
[25,32,35]
这意味着出于某种原因,它被填充了
2
?我唯一能找到的地方是在这里的教程中,状态
BORDER\u常量
用零填充:哎呀……我想
BORDER\u DEFAULT
是用零填充的。哎呀。我讨厌OpenCV文档,因为它不一致,会让你跳起来为了弄清楚一个标志的含义,我就要越过障碍物!…即使这样,它也不可靠!这正是我要发布的内容。+1。@rayryeng谢谢,我希望我能拿出一些文档来支持这一观察结果,但在Matlab和OpenCV方面都严重缺乏(对于MATLAB来说,这意味着边界是零填充的:。如果你看
valid
标志,它会告诉你边界是零填充的,但实际上它不会告诉你它是在
valid
标志之外进行的。我猜它实际上与你使用的标志无关,并且取决于该标志,一些元素删除了所有内容。零填充仍然完成。对于OpenCV:-它告诉您默认值是
BORDER\u default
,它确实执行零填充。@rayryeng我明白您对Matlab的
valid
标志的意思,但是如果我使用
BORDER\u default
我得到
[25,32,35]
这意味着出于某种原因,它被填充了
2
?我唯一能找到的地方是在这里的教程中,状态
BORDER\u常量
用零填充:哎呀……我想
BORDER\u DEFAULT
是用零填充的。哎呀。我讨厌OpenCV文档,因为它不一致,会让你跳起来只是为了弄清楚一面旗帜的含义!……即使这样,它也不可靠!