OpenCV—边缘检测(Canny算子,Sobel算子,Laplace算子,Scharr滤波)

有点偷懒,凑合着看吧
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

//添加头文件
#include<opencv2/core/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
 
using namespace std;
using namespace cv;
 
//参数预定义
int Way_num=0;
int struct_size=1;
 
Mat  Img_in , Img_out,Img_gray;
Mat Img_out_x , Img_out_y;
//函数声明
void callback_Way_num(int ,void*);
void callback_struct_size(int ,void*);
void process();
 
//主函数
int main ()
{
	 Img_in=imread("home.jpg");
	 cvtColor(Img_in,Img_gray,CV_BGR2GRAY);
	 imshow("【原图】",Img_gray);
 
 
	 //添加跟踪条
	 namedWindow("【效果图】");
	 createTrackbar("Canny/Sobel/Laplace/scharr","【效果图】",&Way_num, 3 , callback_Way_num);
	 callback_Way_num(Way_num,0);
	
	 //添加跟踪条
	  createTrackbar("参数值","【效果图】",&struct_size, 45 , callback_struct_size);
	  callback_struct_size(struct_size,0);
	
	 waitKey(0);
	 return 0;
 
}
 
//进行自定义的各功能操作
void process()
{
 
//Way_num=0,Canny算子
if (Way_num==0)
Canny(Img_gray,Img_out,struct_size , struct_size*5 , 3);
 
//Way_num=1,Sobel算子
else if(Way_num==1)
{
//计算x方向梯度
Sobel(Img_in , Img_out_x,CV_16U, 1 , 0 , struct_size*2+1 , 1 , 1 , BORDER_DEFAULT);
convertScaleAbs(Img_out_x,Img_out_x);
//计算y方向的梯度
Sobel(Img_in , Img_out_y,CV_16U, 0 , 1 , struct_size*2+1 , 1 , 1 , BORDER_DEFAULT);
convertScaleAbs(Img_out_y,Img_out_y);
//合并
addWeighted( Img_out_x,0.5, Img_out_y , 0.5,0, Img_out);
}
 
 //Way_num=2,Laplace算子
else if(Way_num==2)
{	
	Laplacian(Img_gray,Img_out, CV_16U , struct_size*2+1, 1 , 0  , BORDER_DEFAULT);
	 convertScaleAbs(Img_out ,Img_out); 
}
 
//Way_num=3,scharr滤波
else if(Way_num==3)
{
	//计算x方向梯度
Scharr(Img_in , Img_out_x,CV_16U, 1 , 0 , 1 , 0 , BORDER_DEFAULT);
convertScaleAbs(Img_out_x,Img_out_x);
//计算y方向的梯度
Scharr(Img_in , Img_out_y,CV_16U, 0 , 1 , 1 , 0 ,  BORDER_DEFAULT);
convertScaleAbs(Img_out_y,Img_out_y);
//合并
addWeighted( Img_out_x , 0.5 , Img_out_y , 0.5 , 0 , Img_out);
}
 
//显示
imshow("【效果图】",Img_out);
}
 
 
 
 
 
//更能切换开关的回调函数 
void callback_Way_num(int ,void*)
{
	process();
}
 
//改变各个功能操作内核时的回调函数
void callback_struct_size(int ,void*)
{
	process();
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

啊

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值