我遇到了以下问题。 我需要使用线性过滤器过滤矩阵/图像,但我想只过滤那些周围有足够数量的邻居的像素(根据内核大小)。具体来说,使用5x5内核过滤32x32图像的结果应该是28x28大小 是否可以使用OpenCV内置函数以相对简单的方式进行这样的处理?
答案 0 :(得分:2)
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
答案 1 :(得分:0)
在opencv中有一个名为cv :: filter2D的函数,但输出图像的大小与输入图像的大小相同(在过滤期间填充为零)。还有另一个名为vxl的图像/数学库,在那里你可以找到一个适合你要求的convolution operator。