c++视觉处理-----Laplacian算 子

2023-10-12 06:52
文章标签 c++ 处理 视觉 laplacian

本文主要是介绍c++视觉处理-----Laplacian算 子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Laplacian算 子

cv::Laplacian 是 OpenCV 中的一个函数,用于应用Laplacian算子(拉普拉斯算子)在图像上进行边缘检测。以下是 cv::Laplacian 函数的基本用法:

cv::Laplacian(src, dst, ddepth, ksize, scale, delta, borderType);
  • src: 输入图像,通常是灰度图像(单通道)。
  • dst: 输出图像,用于存储Laplacian结果。
  • ddepth: 输出图像的深度,通常设置为 CV_16S
  • ksize: Laplacian核的大小,默认是3,通常用3x3核。
  • scale: 可选参数,结果的缩放因子,默认为1。
  • delta: 可选参数,可选的加法常量,默认为0。
  • borderType: 可选参数,用于处理图像边界的方式,默认是 cv::BORDER_DEFAULT

cv::Laplacian 函数会将Laplacian算子应用于输入图像 src,并将结果存储在 dst 中,以便进行边缘检测。通常,您需要将输入图像转换为灰度图像,因为Laplacian算子通常用于单通道图像。

这个函数是OpenCV中图像处理的一部分,用于检测图像中的边缘和纹理信息。您可以根据需要调整参数以满足您的应用需求。

Laplacian算子来检测图像中的边缘

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("your_image.jpg");if (image.empty()) {std::cerr << "无法加载图像" << std::endl;return -1;}// 转换为灰度图像cv::Mat grayImage;cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);// 应用Laplacian算子cv::Mat laplacianImage;cv::Laplacian(grayImage, laplacianImage, CV_16S);cv::convertScaleAbs(laplacianImage, laplacianImage);// 显示结果cv::imshow("原始图像", image);cv::imshow("Laplacian结果", laplacianImage);cv::waitKey(0);return 0;
}

在这里插入图片描述

使用本地相机实时Laplacian算 子

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>// 回调函数,用于处理滑动块的变化
void onTrackbar(int threshold, void* userData) {cv::Mat frame;cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)if (!cap.isOpened()) {std::cerr << "无法打开相机" << std::endl;return;}while (true) {cap >> frame; // 从相机捕获一帧图像// 转换为灰度图像cv::Mat grayImage;cv::cvtColor(frame, grayImage, cv::COLOR_BGR2GRAY);// 应用Laplacian算子cv::Mat laplacianImage;cv::Laplacian(grayImage, laplacianImage, CV_16S);cv::convertScaleAbs(laplacianImage, laplacianImage);// 显示结果cv::imshow("实时Laplacian", laplacianImage);// 等待用户按下ESC键,然后退出循环if (cv::waitKey(1) == 27) {break;}}
}int main() {cv::namedWindow("实时Laplacian");int initialThreshold = 3;int maxThreshold = 30;cv::createTrackbar("阈值", "实时Laplacian", &initialThreshold, maxThreshold, onTrackbar);onTrackbar(initialThreshold, nullptr); // 初始化cv::waitKey(0); // 等待用户按下任意键退出return 0;
}

Laplacian算 子特征提取

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("your_image.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加载图像" << std::endl;return -1;}// 应用Laplacian算子cv::Mat laplacianImage;cv::Laplacian(image, laplacianImage, CV_16S);// 将结果转换为正数cv::Mat laplacianAbs;cv::convertScaleAbs(laplacianImage, laplacianAbs);// 二值化处理以提取边缘特征cv::Mat binaryImage;cv::threshold(laplacianAbs, binaryImage, 30, 255, cv::THRESH_BINARY);// 显示结果cv::imshow("原始图像", image);cv::imshow("Laplacian结果", laplacianAbs);cv::imshow("边缘特征", binaryImage);cv::waitKey(0);return 0;
}

在这里插入图片描述

这篇关于c++视觉处理-----Laplacian算 子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194100

相关文章

利用c++判断水仙花数并输出示例代码

《利用c++判断水仙花数并输出示例代码》水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,:本文主要介绍利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以... 以下是使用C++实现的相同逻辑代码:#include <IOStream>#include <vec

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造