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

Refer from http://blog.csdn.net/icvpr/article/details/8502949

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


算法:

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



  1. //  基于Laplacian算子的图像边缘增强    
  2. //  Author: www.icvpr.com    
  3. //  Blog: http://blog.csdn.net/icvpr    
  4.   
  5.   
  6. #include <iostream>  
  7. #include <vector>  
  8. #include <opencv2/opencv.hpp>  
  9. void edgeEnhance(cv::Mat& srcImg, cv::Mat& dstImg)  
  10. {  
  11.     if (!dstImg.empty())  
  12.     {  
  13.         dstImg.release();  
  14.     }  
  15.       
  16.     std::vector<cv::Mat> rgb;  
  17.   
  18.     if (srcImg.channels() == 3)        // rgb image  
  19.     {  
  20.         cv::split(srcImg, rgb);  
  21.     }  
  22.     else if (srcImg.channels() == 1)   // gray image  
  23.     {  
  24.         rgb.push_back(srcImg);  
  25.     }  
  26.       
  27.     // 分别对R、G、B三个通道进行边缘增强  
  28.     for (size_t i = 0; i < rgb.size(); i++)  
  29.     {  
  30.         cv::Mat sharpMat8U;  
  31.         cv::Mat sharpMat;  
  32.         cv::Mat blurMat;  
  33.   
  34.         // 高斯平滑  
  35.         cv::GaussianBlur(rgb[i], blurMat, cv::Size(3,3), 0, 0);  
  36.   
  37.         // 计算拉普拉斯  
  38.         cv::Laplacian(blurMat, sharpMat, CV_16S);  
  39.   
  40.         // 转换类型  
  41.         sharpMat.convertTo(sharpMat8U, CV_8U);  
  42.         cv::add(rgb[i], sharpMat8U, rgb[i]);  
  43.     }  
  44.   
  45.       
  46.     cv::merge(rgb, dstImg);  
  47. }  
  48.   
  49.   
  50. int main(int argc, char** argv)  
  51. {  
  52.     cv::Mat image = cv::imread("../test.jpg");  
  53.     if (image.empty())  
  54.     {  
  55.         std::cout<<"read image failure"<<std::endl;  
  56.         return -1;  
  57.     }  
  58.   
  59.     // rgb   
  60.     cv::Mat resultRgb;  
  61.     edgeEnhance(image, resultRgb);  
  62.     cv::imwrite("../outRgb.jpg", resultRgb);  
  63.   
  64.     // gray  
  65.     cv::Mat gray;  
  66.     cv::cvtColor(image, gray, CV_BGR2GRAY);  
  67.     cv::imwrite("../gray.jpg", gray);  
  68.   
  69.     cv::Mat resultGray;  
  70.     edgeEnhance(gray, resultGray);  
  71.     cv::imwrite("../outGray.jpg", resultGray);    
  72.   
  73.     return 0;  


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值