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


下面代码实现了基于Laplacian算子的图像边缘增强 。


算法:

边缘增强图像 = 源图像 + 边缘图像



//  基于Laplacian算子的图像边缘增强  
//  Author: www.icvpr.com  
//  Blog: http://blog.csdn.net/icvpr  


#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
void edgeEnhance(cv::Mat& srcImg, cv::Mat& dstImg)
{
	if (!dstImg.empty())
	{
		dstImg.release();
	}
	
	std::vector<cv::Mat> rgb;

	if (srcImg.channels() == 3)        // rgb image
	{
		cv::split(srcImg, rgb);
	}
	else if (srcImg.channels() == 1)   // gray image
	{
		rgb.push_back(srcImg);
	}
	
	// 分别对R、G、B三个通道进行边缘增强
	for (size_t i = 0; i < rgb.size(); i++)
	{
		cv::Mat sharpMat8U;
		cv::Mat sharpMat;
		cv::Mat blurMat;

		// 高斯平滑
		cv::GaussianBlur(rgb[i], blurMat, cv::Size(3,3), 0, 0);

		// 计算拉普拉斯
		cv::Laplacian(blurMat, sharpMat, CV_16S);

		// 转换类型
		sharpMat.convertTo(sharpMat8U, CV_8U);
		cv::add(rgb[i], sharpMat8U, rgb[i]);
	}

	
	cv::merge(rgb, dstImg);
}


int main(int argc, char** argv)
{
	cv::Mat image = cv::imread("../test.jpg");
	if (image.empty())
	{
		std::cout<<"read image failure"<<std::endl;
		return -1;
	}

	// rgb 
	cv::Mat resultRgb;
	edgeEnhance(image, resultRgb);
	cv::imwrite("../outRgb.jpg", resultRgb);

	// gray
	cv::Mat gray;
	cv::cvtColor(image, gray, CV_BGR2GRAY);
	cv::imwrite("../gray.jpg", gray);

	cv::Mat resultGray;
	edgeEnhance(gray, resultGray);
	cv::imwrite("../outGray.jpg", resultGray);	

	return 0;
}


相关内容:www.icvpr.com

-------------------------------------------------------
< 转载请注明:http://blog.csdn.net/icvpr>

你可能感兴趣的:(opencv,图像增强,图像边缘增强)