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

8.10Laplacian算子

实验原理

Laplacian算子也是一种用于边缘检测的技术,它通过查找二阶导数的零交叉点来定位边缘。

cv::Laplacian()函数是OpenCV库提供的一个用于计算图像拉普拉斯算子的函数。拉普拉斯算子是一个二阶微分算子,常用于图像处理中检测边缘或突变区域。它通过计算图像中每个像素点的二阶导数来寻找局部最大值或最小值,从而突出图像中的边缘部分

函数原型

void Laplacian(InputArray src, OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT);参数说明
src: 输入图像,可以是单通道或多通道图像,每个通道可以是8位或32位浮点类型。
dst: 输出图像。输出图像将具有与源图像相同的大小和通道数,但深度由ddepth参数指定。
ddepth: 指定输出图像的深度。可以是CV_16S, CV_32F 或 CV_64F。这决定了计算出的梯度值的类型。
ksize: 拉普拉斯算子的核大小,可以是1, 3, 5, 或 7。当ksize为1时,使用内建的3x3核。其他值对应于相应大小的核。
scale: 可选参数,用于缩放导数结果。默认值为1。
delta: 可选参数,用于加到导数结果上的偏移量。默认值为0。
borderType: 可选参数,指定边界扩展方式。默认值为BORDER_DEFAULT,通常意味着BORDER_REFLECT_101。内置核
对于ksize=1的情况,OpenCV使用预定义的3x3核:
1  1  1
1 -8  1
1  1  1

示例代码

下面是一个使用cv::Laplacian函数来检测图像边缘的C++示例:

#include <opencv2/opencv.hpp>
#include <iostream>int main(int argc, char** argv)
{// 读取图像文件cv::Mat img = cv::imread("9.png", cv::IMREAD_GRAYSCALE);if (img.empty()){std::cout << "Error: Image not found or unable to read the image." << std::endl;return -1;}// 创建输出图像cv::Mat laplacian;// 计算拉普拉斯边缘cv::Laplacian(img, laplacian, CV_16S, 3); // 使用16位深度和3x3核// 转换回8位图像cv::convertScaleAbs(laplacian, laplacian);// 显示原图和拉普拉斯边缘图像cv::namedWindow("Original Image", cv::WINDOW_NORMAL);cv::imshow("Original Image", img);cv::namedWindow("Laplacian Edges", cv::WINDOW_NORMAL);cv::imshow("Laplacian Edges", laplacian);// 等待用户按键后退出cv::waitKey(0);return 0;
}

运行结果

在这个示例中,我们读取了一张灰度图像,并使用cv::Laplacian函数计算了图像的拉普拉斯边缘。由于拉普拉斯边缘检测可能会产生负值,所以我们使用CV_16S作为输出深度,以保存这些负值。之后,我们使用cv::convertScaleAbs函数将结果转换为8位图像,这样可以方便地显示出来。最后,我们显示了原始图像和拉普拉斯边缘图像。

请注意,拉普拉斯算子对噪声非常敏感,所以在实际应用中,通常会在应用拉普拉斯算子之前先对图像进行平滑处理,比如使用高斯滤波。这可以通过cv::GaussianBlur函数实现。


http://www.mrgr.cn/news/24068.html

相关文章:

  • 『功能项目』播放动画时禁止点击移动【40】
  • C++第五节 - this指针、构造函数、析构函数
  • C++ | Leetcode C++题解之第398题随机数索引
  • 全球热门剪辑软件大搜罗
  • 项目答辩总结
  • JavaScript --while案例求一个数字的阶乘
  • 骑砍2霸主MOD开发(26)-使用TrfExporterBlender制作TRF文件
  • QScopedPointer的了解
  • 【LVI-SLAM】RTK、GPS和GNSS定位技术
  • Windows句柄HANDLE是一个指向系统资源的唯一标识符
  • HW | AMD GPU上 “nvidia-smi -lms” 的等价指令——MI300X实时查看GPU使用率
  • 【安全漏洞】Apache Tomcat 高危漏洞版本
  • MYSQL的结构及常用命令
  • windows C++-并行编程-使用 parallel_invoke 来执行并行操作
  • MySQL聚合统计:性能优化与高级应用
  • C++之结构体
  • 【有啥问啥】探索扫地机器人中的 SLAM 算法:原理、实现与未来展望
  • 9.10javaweb项目总结
  • 国产ERT/ECT工业电阻/电容层析成像系统在多相流领域的应用
  • C++设计模式——Mediator中介者模式