opencv c++ 图像梯度、边缘、锐化

这篇具有很好参考价值的文章主要介绍了opencv c++ 图像梯度、边缘、锐化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像梯度的目的:

获取图像上沿着某一方向或多个方向上,像素值的突变图像。

即:

对满足之间相互独立的函数,

opencv c++ 图像梯度、边缘、锐化

1、预备知识

1.1、常见的梯度计算算子

opencv c++ 图像梯度、边缘、锐化opencv c++ 图像梯度、边缘、锐化opencv c++ 图像梯度、边缘、锐化

 1.2、梯度计算方法

L2法:

opencv c++ 图像梯度、边缘、锐化

 L1法:

opencv c++ 图像梯度、边缘、锐化

 1.3如何获取梯度图像

分别使用x、y方向的算子,在原始图像上卷积来获取Gx,Gy,然后选用梯度计算方法来获取对应像素点的梯度值。

opencv c++ 图像梯度、边缘、锐化

2、代码示例

2.1robot算子

void self_conv(Mat& image)
{
	//robot 梯度计算
	Mat robot_x = (Mat_<int>(2, 2) << 1, 0, 0, -1);//自定义Mat核
	Mat robot_y = (Mat_<int>(2, 2) << 0, 1, -1, 0);
	Mat grad_x,grad_y;
	filter2D(image, grad_x, CV_32F, robot_x, Point(-1, -1), 0, BORDER_DEFAULT);
	filter2D(image, grad_y, CV_32F, robot_y, Point(-1, -1), 0, BORDER_DEFAULT);
	convertScaleAbs(grad_x, grad_x);//该API将图像格式转为CV_8U格式,并将所有像素值置为正。
	convertScaleAbs(grad_y, grad_y);
	Mat result;
	add(grad_x, grad_y, result);
	namedWindow("robot img", WINDOW_FREERATIO);
	imshow("robot img", result);
}

2.2sobel算子

注:也可仿照robot算子示例输入3×3的卷积核,并赋予对应的sobel值进行梯度图像获取 。

opencvAPI调用示例:

void self_conv(Mat& image)
{
	
	Mat grad_x,grad_y;
	Sobel(image, grad_x, CV_32F, 1, 0);
	Sobel(image, grad_y, CV_32F, 0, 1);
	convertScaleAbs(grad_x, grad_x);//该API将图像格式转为CV_8U格式,并将所有像素值置为正。
	convertScaleAbs(grad_y, grad_y);
	Mat result2;
	//add(grad_x, grad_y, result2);
	addWeighted(grad_x, 0.5, grad_y, 0.5, 0, result2);
	namedWindow("sobel img", WINDOW_FREERATIO);
	imshow("sobel img", result2);
}

2.3Scharr算子

void self_conv(Mat& image)
{
	
	Mat grad_x,grad_y;
	Scharr(image, grad_x, CV_32F, 1, 0);
	Scharr(image, grad_y, CV_32F, 0, 1);
	convertScaleAbs(grad_x, grad_x);//该API将图像格式转为CV_8U格式,并将所有像素值置为正。
	convertScaleAbs(grad_y, grad_y);
	Mat result3;
	//add(grad_x, grad_y, result2);
	addWeighted(grad_x, 0.5, grad_y, 0.5, 0, result3);
	namedWindow("Scharr img", WINDOW_FREERATIO);
	imshow("Scharr img", result3);
}

结果:

opencv c++ 图像梯度、边缘、锐化

3、拉普拉斯算子进行边缘获取、锐化

即二阶导数的图像应用。

3.1、拉普拉斯算子与锐化算子

拉普拉斯算子:

opencv c++ 图像梯度、边缘、锐化

分别为: 四邻域算子、八邻域算子、变种算子。

拉普拉斯算子缺点:当图像细节较多时,难以去除这些细节的影响,需要与图像阈值化进行搭配使用。

锐化算子:原图加上拉普拉斯算子的结果,本质为图像增强。

opencv c++ 图像梯度、边缘、锐化

 3.2、代码示例

拉普拉斯:

void Laplacian_demo(Mat& image)
{
	Mat dst;
	Laplacian(image, dst, -1, 3, 1.0, 0, BORDER_DEFAULT);
	namedWindow("Laplacian", WINDOW_FREERATIO);
	imshow("Laplacian", dst);
}

opencv c++ 图像梯度、边缘、锐化

 锐化:

由于没有现有的API,下列代码由filter2D加上自定义Mat方法实现。

void QuickDemo::image_descent(Mat& image)
{
	//定义锐化算子
	Mat sharp = (Mat_<int>(3, 3) << 0, -1, 0,
									-1, 5, -1,
									0, -1, 0);
	Mat result;
	filter2D(image, result, -1, sharp, Point(-1, -1), 0, BORDER_DEFAULT);
	convertScaleAbs(result, result);
	namedWindow("sharp img", WINDOW_FREERATIO);
	imshow("sharp img", result);
}

opencv c++ 图像梯度、边缘、锐化

4、USM(unsharp mask)锐化

权重化减法锐化公式:

 sharp_img = α×blur - β×laplacian

优点:忽视细小细节着重对有用部分边缘进行锐化。

void usm_sharp(Mat& image)
{
	Mat blur_img, lap_img;
	GaussianBlur(image, blur_img, Size(3, 3), 0, 0, BORDER_DEFAULT);
	Laplacian(image, lap_img, -1, 1, 1.0, 0, BORDER_DEFAULT);
	Mat usm_img;
	addWeighted(blur_img, 1, lap_img, -0.7, 0, usm_img, -1);
	namedWindow("usm_sharp img", WINDOW_FREERATIO);
	imshow("usm_sharp img", usm_img);

}

opencv c++ 图像梯度、边缘、锐化文章来源地址https://www.toymoban.com/news/detail-454529.html

到了这里,关于opencv c++ 图像梯度、边缘、锐化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv基础41-图像梯度-sobel算子详解cv2.Sobel()(边缘检测基础)

    图像梯度是用于描述图像变化率的概念。在图像处理中,梯度指的是图像中每个像素的灰度值变化速率或方向。它常用于边缘检测和图像特征提取。 一维图像的梯度表示为函数 f(x) 的导数,而在二维图像中,梯度是一个向量,包含两个分量:水平方向和垂直方向的灰度变化率

    2024年02月14日
    浏览(48)
  • 8 图像去噪 滤波 锐化 边缘检测案例(matlab程序)

    1. 简述        学习目标:一个图像处理的经典综合案例 一、图像锐化的原理   图像锐化的目的是凸显物体的细节轮廓,通常可以用梯度、Laplace算子和高通滤波来实现,下面一一说明: 1、梯度法 梯度计算可以参考 小白学习图像处理——canny边缘检测算法 ,假设Gx为x方

    2024年02月12日
    浏览(40)
  • 【OpenCv • c++】图像识别边缘检测 图像差分运算

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪 边缘检测是图像处理与计算机视觉中最重要的技术之一,其目的是检

    2024年02月03日
    浏览(39)
  • Opencv C++图像处理:亮度+对比度+饱和度+高光+暖色调+阴影+漫画效果+白平衡+浮雕+羽化+锐化+颗粒感

    更多详细信息请看:OpenCV专栏:翟天保Steven

    2024年02月04日
    浏览(55)
  • (数字图像处理MATLAB+Python)第七章图像锐化-第三节:高斯滤波与边缘检测

    高斯函数 :是一种常见的连续函数,通常用符号 G ( x ) G(x) G ( x ) 表示。它可以用下面的公式定义 G ( x ) = 1 σ 2 π e − x 2 2 σ 2 G(x)=frac{1}{sigma sqrt{ 2pi }}e^{-frac{x^{2}}{2sigma^{2}}} G ( x ) = σ 2 π ​ 1 ​ e − 2 σ 2 x 2 ​ 其中, x x x 是自变量, σ sigma σ 是一个正实数,表示高斯函

    2024年02月06日
    浏览(57)
  • OV5640 摄像头的图像拉普拉斯锐化处理和边缘提取

    如图所示,这是整个视频采集系统的原理框图。         上电初始,FPGA 需要通过 IIC 接口对 CMOS Sensor 进行寄存器初始化配置。这些初始化的基本参数,即初始化地址对应的初始化数据都存储在一个预先配置好的 FPGA 片内 ROM中。在初始化配置完成后,CMOS Sensor 就能够持续

    2024年02月01日
    浏览(57)
  • OpenCV数字图像处理基于C++:边缘检测

    边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多

    2024年02月05日
    浏览(60)
  • Python从零到壹丨详解图像锐化Roberts、Prewitt算子实现边缘检测

    摘要: 图像锐化和边缘提取技术可以消除图像中的噪声,提取图像信息中用来表征图像的一些变量,为图像识别提供基础。本章主要介绍Robert算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr算子等。 本文分享自华为云社区《[Python从零到壹] 五十七.图像增强及运算篇之图像锐

    2024年02月05日
    浏览(53)
  • Python图像锐化及边缘检测(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)

    目录 图像锐化概述 算法方法介绍  代码实现 效果展示 图像锐化 (image sharpening) 是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波

    2023年04月17日
    浏览(48)
  • 37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。

    基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。 37matlab边缘检测图像处理 (xiaohongshu.com)

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包