我的垫子只有一列和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。
由于
吉尔。
答案 0 :(得分:3)
你有一个列,但你指定高斯的宽度是大而不是指定高度! OpenCV根据上下文使用row,col或x,y表示法。一般规则是,无论何时使用“点”或“大小”,它们的行为都类似于x,y,只要参数是单独的值,它们就像行,列一样。
内核大小也应该是奇数。如果指定内核大小,则可以将sigma设置为零,以使OpenCV计算合适的sigma值。
总而言之,这应该会更好:
GaussianBlur(A,AFilt,cv::Size(1,21),0);
答案 1 :(得分:1)
文档og GaussianBlur说内核大小必须是奇数,我会尝试使用奇数大小的内核,看看是否有任何区别