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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现