Opencv3 Robert算子 Sobel算子 拉普拉斯算子 自定义卷积核——实现渐进模糊

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

//Robert算子
int Demo_Robert()
{
  char win1[] = "window1";
  char win2[] = "window2";
  char win3[] = "window3";

  Mat img1, img2, img3, kernel_x, kernel_y;
  img1 = imread("D://images//box//0019-00.jpg");
  if (img1.empty())
  {
    cout << "could not load image..."<< endl;
    return 0;
  }
  imshow(win1,img1);

  //X方向—Robert算子
  kernel_x = (Mat_<int>(2,2)<<1,0,0,-1);
  filter2D(img1,img2,-1,kernel_x,Point(-1,-1),0,0);
  //Y方向—Robert算子
  kernel_y = (Mat_<int>(2, 2) << 0, 1, -1, 0);
  filter2D(img1, img3, -1, kernel_y, Point(-1, -1), 0, 0);

  imshow(win2, img2);
  imshow(win3, img3);
  return 0;
}

//Sobel算子
int Demo_Sobel()
{
  char win1[] = "window1";
  char win2[] = "window2";
  char win3[] = "window3";

  Mat img1, img2, img3, kernel_x, kernel_y;
  img1 = imread("D://images//box//0019-00.jpg");
  if (img1.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }
  imshow(win1, img1);

  //X方向—Sobel算子
  kernel_x = (Mat_<int>(3, 3) << -1,0,1,-2,0,2,-1,0,1);
  filter2D(img1, img2, -1, kernel_x, Point(-1, -1), 0, 0);
  //Y方向—Sobel算子
  kernel_y = (Mat_<int>(3, 3) << -1,-2,-1,0,0,0,1,2,1);
  filter2D(img1, img3, -1, kernel_y, Point(-1, -1), 0, 0);

  imshow(win2, img2);
  imshow(win3, img3);
  return 0;

}

//拉普拉斯算子
int Demo_Laplace()
{
  char win1[] = "window1";
  char win2[] = "window2";
  char win3[] = "window3";

  Mat img1, img2, img3, kernel_x, kernel_y;
  img1 = imread("D://images//box//0019-00.jpg");
  if (img1.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }
  imshow(win1, img1);

  //Laplace算子
  kernel_x = (Mat_<int>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
  filter2D(img1, img2, -1, kernel_x, Point(-1, -1), 0, 0);
  
  imshow(win2, img2);
  return 0;
}

//自定义卷积核——实现渐进模糊
int Demo_Kernel()
{
  char win1[] = "window1";
  char win2[] = "window2";
  char win3[] = "window3";

  Mat img1, img2, img3, kernel_x, kernel_y;
  img1 = imread("D://images//box//0019-00.jpg");
  if (img1.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }
  imshow(win1, img1);

  int c = 0;
  int index = 0;
  int ksize = 3;
  while (true)
  {
    c = waitKey(600);
    if ((char)c==27)
    {
      break;
    }
    ksize = 4 + (index % 5) * 2 + 1;
    Mat kernel1 = Mat::ones(Size(ksize,ksize),CV_32F)/(float)(ksize*ksize);
    filter2D(img1,img2,-1,kernel1,Point(-1,-1));
    index++;
    imshow(win2,img2);
  }
  

  imshow(win2, img2);
  return 0;
}

int main()
{
  //Demo_Robert();
  //Demo_Sobel();
  //Demo_Laplace();
  Demo_Kernel();

  waitKey(0);
  return 0;
}

 

 

posted @   西北逍遥  阅读(2465)  评论(3编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示