关闭

OpenCV学习Laplacian 变换及其运用

标签: 图像处理opencv
1711人阅读 评论(0) 收藏 举报
分类:


int main(int /*argc*/, char** /*argv*/) {

	Mat img, imgLaplacian, imgResult;

	//------------------------------------------------------------------------------------------- test, first of all
	// now do it by hand
	img = (Mat_<uchar>(4, 4) << 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 12, 13, 14, 15);
	cout << img << endl;

	// first, the good result
	/*
	src_gray: 输入图像。
	dst: 输出图像
	ddepth: 输出图像的深度。 因为输入图像的深度是 CV_8U ,这里我们必须定义 ddepth = CV_16S 以避免外溢。
	kernel_size: 内部调用的 Sobel算子的内核大小,此例中设置为3。
	scale, delta 和 BORDER_DEFAULT: 使用默认值。
	*/
	//Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
	Laplacian(img, imgLaplacian, CV_8UC1);
	cout << "opencv laplacian" << endl;
	cout << imgLaplacian << endl;

	Mat kernel = (Mat_<float>(3, 3) <<
		0, 1, 0,
		1, -4, 1,
		0, 1, 0);
	int window_size = 3;

	// now, reaaallly by hand
	// note that, for avoiding padding, the result image will be smaller than the original one.
	Mat frame, frame32;
	Rect roi;
	imgLaplacian = Mat::zeros(img.size(), CV_32F);
	for (int y = 0; y<img.rows - window_size / 2 - 1; y++) {
		for (int x = 0; x<img.cols - window_size / 2 - 1; x++) {
			roi = Rect(x, y, window_size, window_size);
			//使用括号运算符,从图像中提取感兴趣区域
			frame = img(roi);
			frame.convertTo(frame, CV_32F);
			frame = frame.mul(kernel);
			float v = sum(frame)[0];
			imgLaplacian.at<float>(y, x) = v;
		}
	}
	imgLaplacian.convertTo(imgLaplacian, CV_8U);
	cout << "dudee" << imgLaplacian << endl;

	// a little bit less "by hand"..
	// using cv::filter2D
	filter2D(img, imgLaplacian, -1, kernel);
	cout << imgLaplacian << endl;


	//------------------------------------------------------------------------------------------- real stuffs now
	img = imread("C:/Users/dell/Desktop/1.jpg", IMREAD_GRAYSCALE); // load grayscale image

	// ok, now try different kernel
	kernel = (Mat_<float>(3, 3) <<
		1, 1, 1,
		1, -8, 1,
		1, 1, 1); // another approximation of second derivate, more stronger

	// do the laplacian filtering as it is
	// well, we need to convert everything in something more deeper then CV_8U
	// because the kernel has some negative values, 
	// and we can expect in general to have a Laplacian image with negative values
	// BUT a 8bits unsigned int (the one we are working with) can contain values from 0 to 255
	// so the possible negative number will be truncated
	filter2D(img, imgLaplacian, CV_32F, kernel);
	img.convertTo(img, CV_32F);
	imgResult = img - imgLaplacian;

	// convert back to 8bits gray scale
	imgResult.convertTo(imgResult, CV_8U);
	imgLaplacian.convertTo(imgLaplacian, CV_8U);

	namedWindow("laplacian", CV_WINDOW_AUTOSIZE);
	imshow("laplacian", imgLaplacian);

	namedWindow("result", CV_WINDOW_AUTOSIZE);
	imshow("result", imgResult);

	while (true) {
		char c = (char)waitKey(10);
		if (c == 27) { break; }
	}

	return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

opencv3计算拉普拉斯变换-Laplacian函数

#include #include #include using namespace cv; using namespace std; int g_nValue = 0; int main() ...
  • qq_23880193
  • qq_23880193
  • 2015-10-17 00:00
  • 1420

自己用opencv写的Laplacian算子

  • 2016-10-11 10:39
  • 711B
  • 下载

OpenCV3_C++_Laplacian()拉普拉斯滤波处理 实例

Opencv3 的开发环境安装和导入请看http://blog.csdn.net/sileixinhua/article/details/71175748所有的OpenCV3_C++实例代码请看htt...
  • sileixinhua
  • sileixinhua
  • 2017-10-14 11:04
  • 296

opencv入门学习之六:拉普拉斯Laplacian变换锐化图像

博客用于知识记录和学习交流,欢迎大家互动学习。 作者:JackGao16 CSDN文章链接: 邮箱:gshuai16@mail.ustc.edu.cn1、拉普拉斯变换锐化图像的原理拉普拉斯锐化图...
  • u013108511
  • u013108511
  • 2017-04-04 19:07
  • 1525

Python OpenCV -- Laplacian 算子(十)

Laplacian 算子:     原理分析:   Sobel 算子 : 在一个图像区域中的边缘部分,像素值出现“跳跃”或者较大的变化。如果在此边缘部分求取一阶导数,会看到极值的出现如图: ...
  • u013220584
  • u013220584
  • 2014-02-20 03:14
  • 1384

OpenCV,三大边缘检测Canny,Sobel,Laplacian,及MFC实现

Sobel 使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分 void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yo...
  • EbowTang
  • EbowTang
  • 2015-01-19 14:56
  • 3343

OpenCV-Python教程(7、Laplacian算子)

本篇文章介绍如何用OpenCV-Python来使用Laplacian算子。 提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用在OpenCV-Python中使用Laplacia...
  • sunny2038
  • sunny2038
  • 2013-06-28 17:20
  • 18924

OpenCV_基于Laplacian算子的图像边缘增强

下面代码实现了基于Laplacian算子的图像边缘增强 。 算法: 边缘增强图像 = 源图像 + 边缘图像 // 基于Laplacian算子的图像边缘增强 // Author: ...
  • icvpr
  • icvpr
  • 2013-01-14 23:28
  • 9939

学习OpenCV范例(十四)——sobel,laplace,canny的运用

本次范例将要学习关于边缘提取,图像锐化的三个基本函数,风别是Sobel(),Laplacian(),Canny(),会从原理讲起,再到代码实现,最后会贴出运行结果,进行三种结果的对比。 1、原理及计算...
  • chenjiazhou12
  • chenjiazhou12
  • 2014-03-20 21:57
  • 4144

OpenCV学习Laplacian 变换及其运用

int main(int /*argc*/, char** /*argv*/) { Mat img, imgLaplacian, imgResult; //------------------...
  • fabulousli
  • fabulousli
  • 2016-05-30 20:54
  • 1711
    个人资料
    • 访问:63709次
    • 积分:1042
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:2篇
    • 译文:1篇
    • 评论:12条
    常用相关网址
    YUAN-KAI WANG http://www.ykwang.tw/single-image-defogging.html 雷佳亚 http://www.cse.cuhk.edu.hk/~leojia/index.html 徐立 http://lxu.me Dani Lischinski http://www.cs.huji.ac.il/~danix/ 人在旅途 http://www.cnblogs.com/Imageshop/ 主页代码汇 http://www.csee.wvu.edu/~xinl/source.html CVPapers http://www.cvpapers.com
    最新评论