首页 > 其他分享 >OpenCV(图像锐化)

OpenCV(图像锐化)

时间:2024-09-23 09:14:08浏览次数:8  
标签:锐化 OpenCV 拉普拉斯 图像 边缘 算子

目录



1. 图像锐化

图像锐化是一种图像增强技术,旨在通过增强图像的边缘信息,使图像看起来更加清晰和具有细节。图像锐化的核心思想是突出图像中的高频分量,这通常与图像中的边缘和快速变化的区域相关。



2. 原理

图像锐化的基本原理是通过增强图像中像素之间的灰度变化,使图像的边缘和细节更加清晰。通常使用拉普拉斯算子或高通滤波器来实现锐化。

常见的图像锐化方法:

  1. 拉普拉斯算子锐化:

    • 使用二阶导数(拉普拉斯算子)检测图像中的边缘,并通过增强这些边缘区域达到锐化效果。
    • 公式:I_sharp = I_original + λ * Laplacian(I_original),其中λ是一个控制锐化程度的参数。
  2. 高通滤波锐化:

    • 高通滤波器保留图像中的高频成分(通常是边缘),去除低频成分(平滑区域),从而增强边缘。
  3. 非锐化掩模法(Unsharp Masking):

    • 首先对图像进行模糊处理,然后将模糊图像从原始图像中减去,从而增强图像的细节。
    • 公式:I_sharp = I_original + λ * (I_original - I_blurred),其中I_blurred是模糊处理后的图像,λ是增强参数。


3. 示例

使用OpenCV,我们可以通过卷积实现锐化。以下是使用拉普拉斯算子实现RGB图像锐化的C++代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    // 读取图像
    Mat image = imread("image.jpg");
    if (image.empty()) {
        cout << "无法读取图像文件!" << endl;
        return -1;
    }

    // 转换为灰度图像
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);

    // 拉普拉斯算子用于边缘检测
    Mat laplacian;
    Laplacian(grayImage, laplacian, CV_16S, 3);  // CV_16S 防止溢出
    convertScaleAbs(laplacian, laplacian);  // 转换为8位图像

    // 将拉普拉斯结果加到原始图像上以锐化
    Mat sharpenedImage;
    image.convertTo(image, CV_16S);  // 将图像转换为16位以避免溢出
    laplacian = laplacian * (-1);    // 拉普拉斯算子结果乘以负数增强边缘
    addWeighted(image, 1.0, laplacian, 1.0, 0, sharpenedImage);  // 原始图像 + 锐化效果
    sharpenedImage.convertTo(sharpenedImage, CV_8U);  // 转换为8位图像

    // 显示图像
    imshow("原始图像", image);
    imshow("锐化图像", sharpenedImage);

    waitKey(0);
    return 0;
}

代码解析:

  1. cvtColor:将RGB图像转换为灰度图像,因为拉普拉斯算子通常用于灰度图像的边缘检测。
  2. Laplacian:使用OpenCV的拉普拉斯算子检测图像中的边缘,并生成一个增强边缘的图像。
  3. addWeighted:将拉普拉斯算子的结果加回到原始图像中,生成锐化后的图像。
  4. 类型转换:为了避免溢出,使用16位深度存储拉普拉斯结果并将图像转换回8位。


标签:锐化,OpenCV,拉普拉斯,图像,边缘,算子
From: https://www.cnblogs.com/keye/p/18426316

相关文章

  • 图像处理基础知识点简记
    简单记录一下图像处理的基础知识点一、取样1、释义图像的取样就是图像在空间上的离散化处理,即使空间上连续变化的图像离散化,决定了图像的空间分辨率。2、过程简单描述一下图象取样的基本过程,首先用一个网格把待处理的图像覆盖,然后把每一小格上模拟图像的各个亮度取平均......
  • 第十一章 图像的色彩空间转换
    知识点-RGB色彩空间-Hsv色彩空间-YUV色彩空间-YCrCb色彩空间API知识点-色彩空间转换cvtColor-提取指定色彩范围区域inRangevoid QUickdemo::inrange_demo(Mat&image){   Mathsv;   cvtColor(image,hsv,COLOR_BGR2HSV);--首先转化为hsv色彩图像 ......
  • [OpenCV] 数字图像处理 C++ 学习——16直方图均衡化、直方图比较 详细讲解+附完整代码
    文章目录前言1.直方图均衡化的理论基础(1)什么是直方图(2)直方图均衡化原理(3)直方图均衡化公式2.直方图比较理论基础(1)相关性(Correlation)——HISTCMP_CORREL(2)卡方(Chi-Square)——HISTCMP_CHISQR(3)十字交叉性(Intersection)——HISTCMP_INTERSECT(4)巴氏距离......
  • OpenCV(图像对比度)
    目录1.图像对比度2.对比度调整的原理3.示例4.调整对比度的效果1.图像对比度图像对比度是指图像中亮部和暗部之间的差异程度。对比度越高,亮区更亮,暗区更暗;对比度低时,亮区和暗区的差异不明显,图像显得平淡。2.对比度调整的原理图像对比度可以通过线性变换实现,公式如下:......
  • OpenCV(图像明度)
    目录1.图像明度(Brightness)2.明度调整的原理3.示例1.图像明度(Brightness)明度(Brightness)是图像中反映光亮程度的一个属性,通常用于描述像素的亮度水平。对于RGB图像,明度(Luminance)每个像素中红、绿、蓝通道的加权和。\[\text{Luminance}=0.299\timesR+0.587\timesG......
  • Opencv边界填充、图像数值、图像融合与形态学运算处理方法
     首先导入库和图片,图片根据自己的路径修改importnumpyasnpimportcv2importmatplotlib.pyplotasplt%matplotlibinline#readimg1andimg2img1=cv2.imread(r'material\b.png')img2=cv2.imread(r'material\a.png')img3=cv2.imread(r'material......
  • 智能图像水位识别监测系统
    智能图像水位识别监测系统利用两岸已有的监控摄像头对河道江河湖泊等区域进行实时监测,当智能图像水位识别监测系统监测到水位刻度尺超标时立即抓拍告警同步回传给后台监控平台方便人员及时处理。水位起伏变化,水利水灾往往系于一线之间。智能图像水位识别监测系统现实意义价值重大......
  • 高等数学 3.6 函数图像的描绘
    利用导数描绘函数图形的一般步骤如下:(1)确定函数\(y=f(x)\)的定义域及函数所具有的某些特性(如奇偶性、周期性等),并求出函数的一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\);(2)求出一阶导数\(f^{'}(x)\)和二阶导数\(f^{''}(x)\)在函数定义域内的全部零点,并求出函数\(f(x)......
  • OpenCV(图像饱和度)
    目录1.图像饱和度2.调整饱和度的基本原理3.示例3.1对RGB图像进行饱和度的调整。3.2对RGB图像进行饱和度的调整。4.调整饱和度的影响1.图像饱和度饱和度(Saturation)指的是颜色的纯度或浓度,决定了颜色的鲜艳程度。高饱和度的颜色看起来更加鲜艳,而低饱和度的颜色则显得......
  • 数字图像面积计算一般方法及MATLAB实现
    一、引言     在数字图像处理中,经常需要获取感兴趣区域的面积属性,下面给出图像处理的一般步骤。1.读入的彩色图像 2.将彩色图像转化为灰度图像  3.灰度图像转化为二值图像 4.区域标记5.对每个区域的面积进行计算和显示二、程序代码%面积计算clearall; %......