均值卷积:
void blur( InputArray src, OutputArray dst, Size ksize, // 卷积窗口大小 Point anchor = Point(-1,-1), // 锚点(即处理的像素位于kernel的位置) int borderType = BORDER_DEFAULT //边缘插值方法 );
高斯卷积:
void GaussianBlur( InputArray src, OutputArray dst, Size ksize, // 卷积窗口大小 double sigmaX, // X方向卷积系数 double sigmaY = 0, // Y方向卷积系数 int borderType = BORDER_DEFAULT //边缘插值方法 );
enum BorderTypes { BORDER_CONSTANT = 0, // `iiiiii|abcdefgh|iiiiiii` with some specified `i` BORDER_REPLICATE = 1, // `aaaaaa|abcdefgh|hhhhhhh` BORDER_REFLECT = 2, // `fedcba|abcdefgh|hgfedcb` BORDER_WRAP = 3, // `cdefgh|abcdefgh|abcdefg` BORDER_REFLECT_101 = 4, // `gfedcb|abcdefgh|gfedcba` BORDER_TRANSPARENT = 5, // `uvwxyz|abcdefgh|ijklmno` BORDER_REFLECT101 = BORDER_REFLECT_101, // same as BORDER_REFLECT_101 BORDER_DEFAULT = BORDER_REFLECT_101, // same as BORDER_REFLECT_101 BORDER_ISOLATED = 16 // do not look outside of ROI };
中值滤波:
原型:void medianBlur( InputArray src, OutputArray dst, int ksize ); 参数1:函数的输入,要1,3或4通道的Mat类型的图像 参数2:目标图像 参数3:孔径的线性尺寸,必须大于1.、必须为奇数,越大,滤布越强。
参考:
https://blog.csdn.net/weixin_34409895/article/details/112474924
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { char input; Mat Origin = imread("0002.jpg"); if (!Origin.data) { cout << "ERROR" << endl; return -1; } Mat OutPut = Mat(Origin.size(), Origin.type()); namedWindow("OUTPUT", WINDOW_FREERATIO); imshow("origin", Origin); while (1) { input = waitKey(0); switch (input) { case 'a': medianBlur(Origin, OutPut, 7); //最后一个参数为奇数,越大越强 break; case 'b': GaussianBlur(Origin, OutPut, Size(5, 5), 15, 10, BORDER_DEFAULT); break; case 'c': blur(Origin,OutPut, Size(5, 5), Point(-1, -1), BORDER_DEFAULT); break; case 27: return 0; } imshow("OUTPUT", OutPut); } waitKey(0); return 0; }
具体计算等学了计算机视觉再回来补充。