当前位置: 首页 > news >正文

OpenCV图像滤波(10)Laplacian函数的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

功能描述

计算图像的拉普拉斯值。

该函数通过使用 Sobel 运算符计算出的 x 和 y 的二阶导数之和来计算源图像的拉普拉斯值:
dst = Δ src = ∂ 2 src ∂ x 2 + ∂ 2 src ∂ y 2 \texttt{dst} = \Delta \texttt{src} = \frac{\partial^2 \texttt{src}}{\partial x^2} + \frac{\partial^2 \texttt{src}}{\partial y^2} dst=Δsrc=x22src+y22src

当 ksize > 1 时,通过这种方式计算拉普拉斯值。当 ksize == 1 时,通过使用以下 3×3 掩模过滤图像来计算拉普拉斯值:
[ 0 1 0 1 − 4 1 0 1 0 ] (3) \left[ \begin{matrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{matrix} \right] \tag{3} 010141010 (3)

在图像处理和计算机视觉领域中,Laplacian 操作是一种常用的边缘检测方法。Laplacian 运算符是一种二阶导数算子,可以用来突出图像中的细节和边缘。在 OpenCV 中,cv::Laplacian() 函数用于计算图像的拉普拉斯算子

函数原型

void cv::Laplacian
(InputArray 	src,OutputArray 	dst,int 	ddepth,int 	ksize = 1,double 	scale = 1,double 	delta = 0,int 	borderType = BORDER_DEFAULT 
)		

参数

  • 参数src 源图像。
  • 参数dst 目标图像,与源图像具有相同的大小和通道数。
  • 参数ddepth 期望的目标图像深度,参见组合选项。
  • 参数ksize 用于计算二阶导数滤波器的孔径大小。详情请参阅 getDerivKernels。大小必须为正奇数。
  • 参数scale 计算得到的拉普拉斯值的可选缩放因子。默认情况下,不应用任何缩放。详情请参阅 getDerivKernels。
  • 参数delta 一个可选的增量值,在将结果存储到 dst 之前会加到结果上。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不被支持。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>int main( int argc, char** argv )
{// 读取图像cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE );if ( !src.data ){std::cout << "Error: Could not open or find the image." << std::endl;return -1;}cv::Size sz2Sh( 400, 600 );cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );// 定义目标图像cv::Mat dst;// 设置拉普拉斯算子参数int ddepth     = CV_16S;              // 目标图像的深度,这里使用16位整数int ksize      = 3;                   // 孔径大小,一般选择3或5double scale   = 1;                   // 缩放因子int delta      = 0;                   // 增量值int borderType = cv::BORDER_DEFAULT;  // 边界类型// 应用拉普拉斯算子cv::Laplacian( src, dst, ddepth, ksize, scale, delta, borderType );// 将结果转换回8位图像cv::convertScaleAbs( dst, dst );// 显示原图和拉普拉斯结果cv::namedWindow( "Original Image", cv::WINDOW_NORMAL );cv::imshow( "Original Image", src );cv::namedWindow( "Laplacian Result", cv::WINDOW_NORMAL );cv::imshow( "Laplacian Result", dst );// 等待用户按键cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

http://www.lryc.cn/news/419764.html

相关文章:

  • docker系列11:Dockerfile入门
  • LVS(Linux virual server)详解
  • Session共享方法
  • Ubuntu 22.04 Docker安装笔记
  • 编程-设计模式 6:适配器模式
  • ERC721 概念解释
  • 数据结构(其五)--串
  • LeetCode Hot100 LRU缓存
  • GESP C++ 2024年06月一级真题卷
  • 在 Ubuntu Server 上配置静态 IP 地址
  • 数据结构——栈的讲解(超详细)
  • 三防平板助力MES系统,实现工厂移动式生产报工
  • WEB渗透Bypass篇-常规函数绕过
  • C++从入门到起飞之——string类的模拟实现 全方位剖析!
  • 数据库国产化大趋势下,还需要学习Oracle吗?
  • WebLogic
  • Aspose.Words.dll 插入模板表格,使用的是邮件合并MailMerge功能,数据源是DataTable或list对象,实例
  • 同时打开多个微信
  • MPU6050的STM32数据读取
  • 【微信小程序开发】——奶茶点餐小程序的制作(二)
  • Java 文件上传七牛云
  • 大语言模型生成无人系统(如机械臂、无人机等)可以执行的指令序列
  • 尚硅谷谷粒商城项目笔记——十、调试前端项目renren-fast-vue【电脑CPU:AMD】
  • Python 的元组和列表的区别是什么?
  • 【Impala】学习笔记
  • 视频汇聚平台EasyCVR接入移动执法记录仪,视频无法播放且报错500是什么原因?
  • 【Linux基础】Linux基本指令(二)
  • 全面介绍 Apache Doris 数据灾备恢复机制及使用示例
  • Python pandas常见函数
  • 行业落地分享:阿里云搜索RAG应用实践