如何在OpenCV中使用Gaussian过滤单个列垫

时间:2014-01-01 22:37:56

标签: c++ opencv

我的垫子只有一列和1600行。我想用高斯过滤它。

我尝试了以下内容:

Mat AFilt=Mat(palm_contour.size(),1,CV_32F);
GaussianBlur(A,AFilt,cv::Size(20,1),3);

但我在AFilt(过滤后的垫子)和A中得到了完全相同的值。看起来GaussianBlur什么也没做。

这里有什么问题?如何使用高斯内核平滑单柱垫?

我读过有关BaseColumnFilt的内容,但是没有看到任何用法示例,所以我不确定如何使用它们。

由于我没有线索,所以给予任何帮助将非常感激。

我正在使用Visual Studio 2012在Windows 8上使用OpenCV 2.4.5。

由于

吉尔。

2 个答案:

答案 0 :(得分:3)

你有一个列,但你指定高斯的宽度是大而不是指定高度! OpenCV根据上下文使用row,col或x,y表示法。一般规则是,无论何时使用“点”或“大小”,它们的行为都类似于x,y,只要参数是单独的值,它们就像行,列一样。

内核大小也应该是奇数。如果指定内核大小,则可以将sigma设置为零,以使OpenCV计算合适的sigma值。

总而言之,这应该会更好:

GaussianBlur(A,AFilt,cv::Size(1,21),0);

答案 1 :(得分:1)

文档og GaussianBlur说内核大小必须是奇数,我会尝试使用奇数大小的内核,看看是否有任何区别