卷积流程

1.卷积核旋转180°

2.卷积核和图像对应元素点乘并求和

3.结果输出到输出图像的对应位置

4.移动卷积核重复1-3

图像卷积处理后,由模糊图像的作用。

  1. #include <opencv2\opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main()
  6. {
  7. //待卷积矩阵
  8. uchar points[25] = { 1,2,3,4,5,
  9. 6,7,8,9,10,
  10. 11,12,13,14,15,
  11. 16,17,18,19,20,
  12. 21,22,23,24,25 };
  13. Mat img(5, 5, CV_8UC1, points);
  14. //卷积模板
  15. Mat kernel = (Mat_<float>(3, 3) << 1, 2, 1,
  16. 2, 0, 2,
  17. 1, 2, 1);
  18. Mat kernel_norm = kernel / 12; //卷积模板归一化
  19. //未归一化卷积结果和归一化卷积结果
  20. Mat result, result_norm;
  21. filter2D(img, result, CV_32F, kernel, Point(-1, -1), 2, BORDER_CONSTANT);
  22. filter2D(img, result_norm, CV_32F, kernel_norm, Point(-1, -1), 2, BORDER_CONSTANT);
  23. cout << "result:" << endl << result << endl;
  24. cout << "result_norm:" << endl << result_norm << endl;
  25. //图像卷积
  26. Mat lena = imread("lena.png");
  27. if (lena.empty())
  28. {
  29. cout << "请确认图像文件名称是否正确" << endl;
  30. return -1;
  31. }
  32. Mat lena_fillter;
  33. filter2D(lena, lena_fillter, -1, kernel_norm, Point(-1, -1), 2, BORDER_CONSTANT);
  34. imshow("lena_fillter", lena_fillter);
  35. imshow("lena", lena);
  36. waitKey(0);
  37. return 0;
  38. }

图5-5.png