基于直方图均衡化的图像增强,python opencv 直方图均衡化
梯度算子
坡度由二维列向量定义
向量的模
在实践中通常称为梯度图像。
考虑一下3x3的图像区域z表示灰度,上式的点z5处的f值可以用数字近似。
微分滤波器模板系数设计罗伯茨交叉梯度算子
维特梯度算子
维特梯度算子
罗伯茨交叉梯度算子
坡度计算由两个模板组成,首先求出坡度的第一项,然后求出坡度的第二项,合计得到坡度。
这两个模板称为罗伯茨相交梯度运算符
维特梯度运算符——3x3的梯度模板
索贝尔梯度算子——3x3的梯度模板
代码实现:
//*
* @file Sobel_Demo.cpp
* @ briefsamplecodeusessobelopropencfunctionsforedgedetection
* @作者开放计算机视觉团队
*/
#include opencv2/imgproc.hpp
#include opencv2/imgcodecs.hpp
#include opencv2/highgui.hpp
#包括输入输出流
使用命名空间cv;
使用命名空间标准
intmain(intargc,char** argv)))))))))。
{
cv:commandlineparserparser(argc,argv,
{ @ input ./data/Lena。jpg 输入图像}
{ ks izek1k大小(按" k "增加值)}
{ scales1scale(点击以增加值)}
{ deltad0delta(点击迪以增加值)}
{ help h false } ;
cout thesampleusessobelorschraopenvfunctionsforedgedetection \ n \ n ;
解析器。打印消息(;
cout \n按 ESC 退出程序% 22 \ n按" r "重置值(ksizewillbe-1 equaltoscharfunction);
Mat图像,src,src _ gray
马特金;
conststringwindow _ name= Sobel demo-simpleedgedetector ;
intk size=解析器。getint(ksize);
int scale=解析器。getint(标度);
int Delta=解析器。getint( Delta );
int ddepth=CV _ 16S
字符串imagename=解析器。getstring( @ input);
image=imread(imagename,IMREAD _ COLOR
if(image.empty()))。
printf (erroropeningimage : % s (n),imagename。c _ str);
返回1;
}
for(;() )。
Gussianblur(image,src,size ) 3,3),0,0,BORDER _ DEFAULT
cvtcolor(src,src_gray,COLOR _ bgr 2 gray);
Mat grad_x,grad _ y;
Mat abs_grad_x,ABS _ grad _ y;
//生成渐变X
Sobel(src_gray,grad_x,ddepth,1,0,ksize,scale,delta,BORDER _ DEFAULT);
//生成梯度y
Sobel(src_gray,grad_y,ddepth,0,1,ksize,scale,delta,BORDER _ DEFAULT);
convertscaleabs(grad_x,ABS _ grad _ x);
convertscaleabs(grad_y,ABS _ grad _ y;
//总梯度(近似值).
ADDWeighted(ABS_grad_x,0.5,abs_grad_y,0.5,0,grad);
imshow(window_name,grad);
charkey=(char)wait key(0))0;
if(key==27 ) {
返回0;
}
if(key==kkey==k ()))))
ksize=ksize 30?ksize 2:-1;
}
if(key==skey==s ()))))
呼叫;
}
if(key==dkey==d ()))))
三角洲;
}
if(key==rkey==r ())))))
比例=1
ksize=-1;
增量=0;
}
}
返回0;
}
结果:
按r键后
教材示例:
原图、概图
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。