marry me,marry
算法原理
C代码实现Mat mar边缘检测(Mat src,int kernelDiameter,double sigma) {
int kernel _ size=内核直径/2;
垫子内核(kernelDiameter,kernelDiameter,CV _ 64fc 1);
for(int I=-kernel _ size;i=kernel _ sizei ) {
for(int j=-kernel _ size;j=kernel _ sizej ) {
内核. at double (i内核大小,j内核大小)=exp(-((pow(j,2) pow(i,2)) /
(功率(,2) * 2)))
* (((pow(j,2) pow(i,2) - 2 *
pow(sigma,2))/(2 * pow(sigma,4));
}
}
马特拉普拉斯(src。rows-kernel _ size * 2,src.cols - kernel_size * 2,CV _ 64fc 1);
Mat dst=Mat:zeros(src。rows-kernel _ size * 2,src.cols - kernel_size * 2,CV _ 8uc 1);
for(int I=kernel _ size;我是src。rows-kernel _ size;i ) {
for(int j=kernel _ size;j src。cols-kernel _ size;j ) {
double sum=0;
for(int x=-kernel _ size;x=kernel _ sizex ){
for(int y=-kernel _ size;y=kernel _ sizey ) {
sum=src.at uchar (i x,j y)* kernel。at double(x kernel _ size,y kernel _ size);
}
}
拉普拉斯。at double(I-kernel _ size,j-kernel _ size)=sum;
}
}
for(int I=1;我dst。第1行;i ) {
for(int j=1;j dst。cols-1;j ) {
如果(拉普拉斯。加倍(i - 1,j) *拉普拉斯。at double (i 1,j) 0) (拉普拉斯。加倍(I,j ^ 1)*拉普拉斯。在double (i,j - 1) 0)
(拉普拉斯算子。加倍(i 1,j - 1) *拉普拉斯算子。at double (i - 1,j 1) 0) (拉普拉斯算子。加倍(i - 1,j - 1) *拉普拉斯算子。在double (i 1,j 1) 0)) {
dst.at uchar (i,j)=255;
}
}
}
返回夏令时
}
//调用
Mat src=imread(F:\\1.jpg ,0);
mat dst=marridgedetection(src,9,1.6);效果原图:
结果图:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。