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

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

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

算法:

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

//  基于Laplacian算子的图像边缘增强 
//  Author:  


#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;
}

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f5cd8e3dd38c8523e5de323ee1daadd2.html