OpenCV_(Laplacian Transform to find the edges)图像拉普拉斯变换查找边缘 图像识别

//6. laplacian transform  拉普拉斯变换--------------------------------------------------------------------
	
	cv::Mat laplace;
	LaplacianZCC laplacian;
	laplacian.setAperture(7);
	cv::Mat flap = laplacian.computeLaplacian(image);//计算
	laplace = laplacian.getLaplacianImage();//获取

	cv::namedWindow("laplace");//显示
	cv::imshow("laplace", laplace);

	//显示图像部分laplacian数据:从点(130,150)开始12X12
	std::cout << std::endl;
	for (int i = 0; i<15; i++) {
		for (int j = 0; j<15; j++)
			std::cout << std::setw(5) << static_cast<int>(flap.at<float>(i+135 , j+362) / 100) << " ";
		std::cout << std::endl;
	}
	std::cout << std::endl;


cv::Mat LaplacianZCC::computeLaplacian(const cv::Mat & image)
{
	cv::Laplacian(image, laplace, CV_32F, aperture);
	img = image.clone();//备份原图像用于零点交叉画线使用
	return laplace;
}

//返回8位图像存储的Laplacian结果,零点交叉于灰度值128,若 未指定scale,则最大值将被放缩至强度255
//使用前先调用computeLaplacian 计算laplace
cv::Mat LaplacianZCC::getLaplacianImage(double scale)
{
	if (scale < 0)
	{
		double lapmin, lapmax;
		cv::minMaxLoc(laplace, &lapmin, &lapmax);
		scale = 127 / std::max(-lapmin, lapmax);
	}
	cv::Mat laplaceImage;
	laplace.convertTo(laplaceImage, CV_8U, scale, 128);
	return laplaceImage;
}


#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

class LaplacianZCC
{
public:
	LaplacianZCC() :aperture(3)
	{		
	}
	~LaplacianZCC();

	void setAperture(int a)
	{
		aperture = a;
	}
	cv::Mat computeLaplacian(const cv::Mat &image);
	cv::Mat getLaplacianImage(double scale = -1.0);
private:
	cv::Mat img; //原图
	cv::Mat laplace; //laplacian的32位浮点图像
	int aperture; //laplacian卷积核的大小
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊鸿一博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值