歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV 基於Laplacian算子的圖像邊緣增強

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

日期:2017/3/1 10:02:55   编辑:Linux編程

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