歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OpenCV 基於Laplacian算子的圖像邊緣增強

OpenCV 基於Laplacian算子的圖像邊緣增強

下面代碼實現了基於Laplacian算子的圖像邊緣增強 。

算法:

邊緣增強圖像 = 源圖像 + 邊緣圖像

//  基於Laplacian算子的圖像邊緣增強 
//  Author: 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;
}

Copyright © Linux教程網 All Rights Reserved