【发布时间】:2014-02-06 15:27:15
【问题描述】:
我遇到了以下问题。
我需要用线性滤波器过滤矩阵/图像,但我只想过滤那些周围有足够数量邻居的像素(根据内核大小)。具体来说,用 5x5 内核过滤 32x32 图像的结果应该是 28x28 大小。
是否可以用 OpenCV 的内置函数以相对简单的方式进行这样的处理?
【问题讨论】:
我遇到了以下问题。
我需要用线性滤波器过滤矩阵/图像,但我只想过滤那些周围有足够数量邻居的像素(根据内核大小)。具体来说,用 5x5 内核过滤 32x32 图像的结果应该是 28x28 大小。
是否可以用 OpenCV 的内置函数以相对简单的方式进行这样的处理?
【问题讨论】:
int kernel_size = 3;
cv::Mat in_img, out_img;
cv::Mat kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size);
cv::filter2D(in_img, out_img, -1 , kernel); //filtering
cv::Size size = in_img.size();
cv::Rect roi(kernel_size, kernel_size,size.width - 2*kernel_size, size.height - 2*kernel_size);
cv::Mat cropped = in_img(roi).clone(); //cropping
【讨论】:
opencv 中有一个名为 cv::filter2D 的函数,但输出图像将与输入图像大小相同(过滤期间填充为零)。还有另一个名为 vxl 的图像/数学库,您可以在那里找到适合您要求的convolution operator。
【讨论】: