VS2015+Opencv4.5.2的拉普拉斯算子源码

@VS2015+Opencv4.5.2的拉普拉斯算子源码
这里附上拉普拉斯算子的源码,算法小白,多多指教

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

using namespace std;
using namespace cv;

const int Kenel_s = 3;//卷积核大小

int main()
{
     //读入图片
	Mat src, dst, dst_L;
	src = imread("Moon.jpg",0);
	copyMakeBorder(src, src, Kenel_s - 1, Kenel_s - 1, Kenel_s - 1, Kenel_s - 1, BORDER_CONSTANT, Scalar(0));//填充图像
	imshow("Image of src", src);
	src.copyTo(dst);
	/*盒式滤波器模糊处理
	for (int i = 0; i < src.rows - 2 * (Kenel_s-1); i++)
	{
		//创建遍历指针
		uchar *src_p_current = src.ptr(i+Kenel_s-1);//原图像指针
		uchar *src_p_upper = src.ptr(i + Kenel_s);
		uchar *src_p_lower = src.ptr(i + Kenel_s - 2);
		uchar *dst_p = dst.ptr(i+Kenel_s - 1);//目的图像指针
		for (int j = 0; j < src.cols*src.channels()-2*(Kenel_s-1); j++)
		{
			dst_p[j + Kenel_s - 1] = saturate_cast<uchar>((src_p_current[j + Kenel_s - 1] + src_p_current[j + Kenel_s - 2] + src_p_current[j + Kenel_s] + src_p_upper[j + Kenel_s - 1] + src_p_upper[j + Kenel_s] + src_p_upper[j + Kenel_s - 2] + src_p_lower[j + Kenel_s - 1] + src_p_lower[j + Kenel_s] + src_p_lower[j + Kenel_s - 2])/9);
		}
	}*/
	//中值滤波处理
	medianBlur(dst, dst,11);
	imshow("Image of medianbulr", dst);
	//阈值处理
	threshold(dst, dst, 20, 255, THRESH_BINARY_INV);
	imshow("Image of threshod", dst);
	//拉普拉斯算子锐化处理
	dst.copyTo(dst_L);
	Mat Dou_val = Mat::zeros(dst_L.rows, dst_L.cols, dst_L.type());
	Mat Dou_val_L = Mat::zeros(dst_L.rows, dst_L.cols, dst_L.type());
	for (int i = 0 + Kenel_s - 1; i < dst.rows - Kenel_s + 1; i++)
	{
		//创建遍历指针
		uchar *current = dst.ptr(i);
		uchar *upper = dst.ptr(i - 1);
		uchar *lower = dst.ptr(i + 1);
		uchar *point_l = Dou_val_L.ptr(i);
		//开始遍历
		for (int j = Kenel_s - 1; j < dst.cols*dst.channels() - Kenel_s + 1; j++)
		{
			//预设拉普拉斯算子卷积核为:Mat Kernel<<1,1,1,1,-8,1,1,1,1
			Dou_val.at<uchar>(i, j) = upper[j] + upper[j - 1] + upper[j + 1] + current[j - 1] -8* current[j] + current[j + 1] + lower[j] + lower[j - 1] + lower[j + 1];
			if (Dou_val.at<uchar>(i,j) != 0)
			{
				point_l[j] = 255;
			}
		}
	}
	//与原图像叠加
	Mat Result = Dou_val_L + src;
	imshow("Image of Laplacian", Result);
	while (waitKey(0) != 'q') {};
	return 0;
}

原图:在这里插入图片描述
提取的边界:
在这里插入图片描述
叠加显示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值