下面代码实现了基于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);
// 转换类型