为什么EmguCV高斯模糊不返回与OpenCV高斯模糊相同的结果?
本文关键字:高斯 模糊 结果 EmguCV 返回 为什么 OpenCV | 更新日期: 2023-09-27 18:15:15
我正在经历OpenCV GaussianBlur函数和EmguCv CvInvoke.cvSmooth/Image之间的不匹配。SmoothGaussian功能。
高斯模糊调用:
GaussianBlur(src, dest, Size(13,13), 1.5, BORDER_REPLICATE);
EmguCV调用:
CvInvoke.cvSmooth(src, dst, SMOOTH_TYPE.CV_GAUSSIAN, 13, 13, 1.5, 0);
在这两种情况下,src都是32F, 3通道图像。我已经验证了src的内容是相同的(将它们保存为bmp并执行二进制diff)。
在opencv中的cvSmooth调用看起来像这样:
CV_IMPL void
cvSmooth( const void* srcarr, void* dstarr, int smooth_type,
int param1, int param2, double param3, double param4 )
{
cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0;
if( smooth_type == CV_GAUSSIAN )
cv::GaussianBlur( src, dst, cv::Size(param1, param2), param3, param4, cv::BORDER_REPLICATE );
}
…它似乎在做同样的事情,我原来的OpenCV调用正在做。CV_GAUSSIAN在EmguCV和OpenCV中都被定义为2。结果非常接近,但是EmguCV图像比OpenCV图像稍微模糊一些。什么好主意吗?我还在EmguCV论坛上交叉发布了这个问题
问题是:
GaussianBlur(src, dest, Size(13,13), 1.5, BORDER_REPLICATE);
传递1.5作为sigma1, 1 (border_replication)作为sigma2。将Emgu代码更改为
CvInvoke.cvSmooth(src, dst, SMOOTH_TYPE.CV_GAUSSIAN, 13, 13, 1.5, 1);
结果为完美匹配。