- 博客(303)
- 资源 (2)
- 收藏
- 关注
原创 基于OpenCV的傅里叶变换
傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在图像中变化剧烈的地方(比如边界)经过傅里叶别换后就相当与高频,反之变化缓慢的地方就是低频。傅里叶变换可以将图像变换为频率域, 傅立叶反变换将频率域变换为空间域。
2023-06-27 20:30:00
2245
2
原创 calHist()-使用OpenCV和C++计算直方图
可以将直方图视为显示图像强度分布的图形。X 轴为像素值(通常范围为 0 到 255),Y 轴为图片中的像素数。这只是查看图像的不同方式。当您查看图像的直方图时,您可能会感觉到图像的对比度、亮度、强度分布等。今天几乎所有的图像处理软件都包含直方图功能。
2023-05-11 20:00:00
2385
1
原创 OpenCV基础(28)使用OpenCV进行摄像机标定Python和C++
摄像头是机器人、监控、太空探索、社交媒体、工业自动化甚至娱乐业等多个领域不可或缺的一部分。 对于许多应用,必须了解相机的参数才能有效地将其用作视觉传感器。在这篇文章中,您将了解相机校准所涉及的步骤及其意义。 我们还共享 C++ 和 Python 代码以及棋盘图案的示例图像。1.什么是相机标定估计相机参数的过程称为相机标定。这意味着我们拥有确定现实世界中的 3D 点与其在该校准相机捕获的图像中对应的 2D 投影(像素)之间的准确关系所需的有关相机的所有信息(参数或系数)。通常这意味着恢复两种参数:
2023-02-21 18:30:00
8709
3
原创 相机标定与3D重建(3)使用OpenCV对摄像机进行标定
相机已经存在很长很长时间了。然而,随着20世纪末廉价针孔相机的出现,针孔相机在我们的日常生活中司空见惯。不幸的是,这种廉价是有代价的:严重的扭曲。幸运的是,这些都是常量,通过标定和一些重新映射,我们可以纠正这一点。此外,通过标定,还可以确定相机的自然单位(像素)和现实单位(例如毫米)之间的关系。1.理论对于畸变,OpenCV考虑了径向和切向畸变。对于径向畸变,采用以下公式:xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)x_{d
2023-02-02 08:56:17
1107
原创 使用OpenCV对点集从左上到右下排序
该函数接受图像img、中心点坐标centers、图像的段数row_amt和图像高度row_h作为输入。它将返回row_amt数组(根据它们的x获取图像的高度,用于定义的get_rows函数,并定义一个计数变量countcount = 0。
2023-01-31 20:15:00
2659
原创 使用 Monai 和 PyTorch 预处理 3D Volumes以进行肿瘤分割
1.介绍针对在使用传统图像处理工具时可能遇到的困难,深度学习已成为医疗保健领域的主要解决方案。因为医学图像比标准图像更难处理(高对比度、人体的广泛变化……)深度学习用于分类、对象检测,尤其是分割任务。在分割方面,深度学习用于分割人体器官,如肝脏、肺和……或分割来自身体不同部位的肿瘤。医学图像有很多不同的类型,例如 MRI(主要用于脑肿瘤分割)、CT 扫描、PET 扫描等。本文将重点介绍 CT 扫描,但同样的操作也适用于其他类型。所以我们知道执行深度学习任务需要许多步骤,其中一个是数据预处理,这是
2022-12-09 23:00:00
4016
2
原创 相机深度理解
在这里,我们专注于数码摄像机。由于相机为视觉和机器学习分析提供图像,因此了解相机如何收集和分发这些图像非常重要。数码摄像机无处不在。数十亿人拥有带有内置摄像头的智能手机或平板电脑,数亿人的计算机上安装了网络摄像头。数字视频的历史很短。第一个半导体图像传感器 (CCD) 于 1969 年在贝尔实验室发明。第二种类型,称为 CMOS 传感器,于 1993 年在加利福尼亚州帕萨迪纳街对面的喷气推进实验室发明。在 1990 年代初期,出现了一种技术融合,允许将数字视频流传输到消费级电脑。第一个流行的消费类网络摄像头
2022-12-07 23:00:00
1342
原创 Jetson相机
NVIDIA Jetson Developer Kits支持直接连接相机,主要使用两种方法。第一种方法是使用MIPI摄像机串行接口(CSI)。MIPI联盟是为移动生态系统开发技术规范的行业组织的名称。在像Nano这样的Jetsons上,这可能是一个传感器模块,就像我们熟悉的基于索尼IMX219图像传感器的树莓派V2相机一样。第二种是通过USB接口连接的摄像头,例如网络摄像头。在本文中,我们将讨论USB摄像头。Jetson的核心是使用Linux内核模块Video Four Linux(版本2)(V4L2)。V
2022-12-06 22:30:00
2538
原创 在Jetson Nano上安装ncnn深度学习框架
本页面将指导您在Jetson Nano上安装腾讯的ncnn框架。因为ncnn框架的目标是移动设备,比如Android手机,所以它没有CUDA支持。然而,大多数Android手机使用Vulkan API对其GPU进行低级访问。ncnn框架可以使用Vulkan例程来加速深度学习模型的卷积。Jetson Nano有ncnn将使用的Vulkan支持,关于软件结构的更多信息可以在和找到。给出的C++代码示例是在Nano的code::Blocks IDE中编写的。
2022-11-09 00:15:00
899
原创 在Jetson Nano上安装MNN深度学习框架
本页面将指导您在Jetson Nano上安装阿里巴巴的MNN框架。在最新的版本中,MNN框架还支持CUDA。这使得它成为Jetson Nano作为一个轻量级框架的理想选择。给出的C++代码示例是在Nano的code::Blocks IDE中编写的。我们只指导您完成基础知识,所以最终您可以构建自己的应用程序。有关MNN库的更多信息,请参阅的文档。也许没有必要,但是安装的是C++版本, 不适合Python。
2022-11-08 23:30:00
1010
原创 在Jetson Nano上安装Caffe
本页面将指导您在具有CUDA和cuDNN支持的Jetson Nano上安装Caffe。我们只指导您完成基础知识,所以最终您可以构建自己的应用程序。有关Caffe的更多信息,请访问:https://caffe.berkeleyvision.org/。
2022-11-07 23:00:00
483
原创 使用Jetson Nano和树莓派相机实现视频流
了解如何用树莓派相机和Jetson Nano使用Flask框架实时视频流!Jetson Nano是一个边缘计算平台,适合低功耗、不受监控和独立使用。它非常适合在没有显示器或键盘等外设连接的情况下使用。本文展示了如何从树莓派(Raspberry Pi)摄像机实时传输视频到web浏览器,并在连接到同一网络的任何其他设备上访问该视频流。
2022-11-06 22:30:00
2204
1
原创 什么是嵌入式视觉
尽管如此,普通的计算机,尤其是带有显卡的计算机,性能还是优于所有标准的嵌入式系统。因此,如果你想运行一些大规模的深度学习程序或者训练任务中,计算机仍然是一个更好的选择。当然,在开始制造你自己的电子产品之前,做一项研究来确定这种方法是否有用是可取的。除了过时的处理器之外,制造商不愿透露其硬件和软件的秘密,而程序员则希望配置最佳设计,这两者之间总是存在摩擦。像Odroid-UX4这样的单板机就可以使用的场景,为什么每次都使用昂贵的计算机?因为更少的零件,所以只需要一个更小的空间和更少的停机时间。
2022-11-04 23:30:00
1854
原创 使用 Python 和 Monai 来扩充您的数据集以进行肿瘤或器官分割
1.介绍我们在上一篇文章中讨论了如何为肿瘤分割预处理 3D volumes,因此在本文中,我们将讨论处理深度学习项目时的另一个重要步骤。这是数据增强步骤。2.什么是数据增强?我们都知道,为了训练神经网络,需要大量数据才能获得准确的模型以及可以处理该特定任务中大多数情况的稳健模型。然而,在任何任务中,特别是在医疗保健项目中,并不总是能够获得大量的自然数据。因为医学成像中的一个输入是具有多个切片的单个患者,并且我们都知道收集这类数据(许多患者)的数据集是多么困难。出于这个原因,我们必须通过创建合成数据来
2022-10-27 22:00:00
1867
2
原创 使用OpenCV如何确定一个对象的方向
在本教程中,我们将构建一个程序,该程序可以使用流行的计算机视觉库 OpenCV 确定对象的方向(即以度为单位的旋转角度)。最常见的现实世界用例之一是当您想要开发机械臂的取放系统时。确定一个物体在传送带上的方向是确定合适的抓取、捡起物体并将其放置在另一个位置的关键。
2022-10-26 22:45:00
4714
1
原创 OpenCV 连通分量标记和分析
在本教程中,您将学习如何使用 OpenCV 执行连通分量标记和分析。。连通分量标记(也称为连通分量分析、斑点提取或区域标记)是图论的一种算法应用,用于确定二进制图像中“斑点”状区域的连通性。我们经常在与使用轮廓相同的情况下使用连通分量分析;然而,连通分量标记通常可以让我们对二值图像中的斑点进行更细粒度的过滤。在使用轮廓分析时,我们经常受到轮廓层次结构的限制(即一个轮廓包含在另一个轮廓中)。通过连通分量分析,我们可以更轻松地分割和分析这些结构。...
2022-08-04 22:00:00
2957
2
原创 OpenCV分水岭分割算法2
分水岭算法是用于分割的经典算法,在提取图像中粘连或重叠的对象时特别有用,例如上图中的硬币。使用传统的图像处理方法,如阈值和轮廓检测,我们将无法从图像中提取每一个硬币,但通过利用分水岭算法,我们能够检测和提取每一个硬币。在使用分水岭算法时,我们必须从用户定义的标记开始。这些标记可以通过点击手动定义,或者我们可以使用阈值和/或形态学操作等方法自动或启发式定义它们。基于这些标记,分水岭算法将输入图像中的像素视为地形——该方法通过“淹没”山谷,从标记开始向外移动,直到不同标记相遇。...
2022-07-30 23:00:00
2199
1
原创 OpenCV形状检测
开始定义我们的ShapeDetector类。我们将跳过这里的init构造函数,因为不需要初始化任何东西。#导入必要的包importcv2classShapeDetector#初始化形状名称并近似轮廓shape="unidentified"peri=cv2.arcLength(c,True)approx=cv2.approxPolyDP(c,0.04*peri,True)我们的检测方法,它只需要一个参数c,即我们试图识别的形状的轮廓。...
2022-07-30 14:27:39
8522
原创 基于标记的分水岭分割算法
分水岭技术是一种众所周知的分割算法,特别适用于提取图片中的相邻或重叠对象。使用分水岭方法时,我们必须从用户定义的标记开始。这些标记可以使用点击手动定义,也可以使用阈值或形态学处理方法定义。分水岭技术将输入图像中的像素视为基于这些标记的局部极小值(称为地形)——该方法从标记向外“淹没”山谷,直到各种标记的山谷相遇。为了产生准确的分水岭分割,必须准确地设置标记。我们使用一种基于OpenCV标记的分水岭技术来指定哪些谷点应该合并,哪些不应该合并。它是一种交互式图像分割,而不是自动图像分割。......
2022-07-28 22:00:00
2584
1
原创 多边形点测试
输入轮廓。要测试的点。如果为真,该函数估计从点到最近的轮廓边缘的符号距离。否则,函数只检查点是否在轮廓线内。该函数确定点是在轮廓线内、外,还是位于边缘(或与顶点重合)。它会相应地返回正(内部)、负(外部)或零(边缘)值。当时,返回值分别是**+1**,和。否则,返回值是点和最近的轮廓边缘之间的带符号距离。......
2022-07-28 09:09:06
747
原创 基于OpenCV的轮廓检测(1)
现在如果对returnPoints=False做同样的事情,我得到以下结果[[129],[67],[0],[142]]。当returnPoints=True,我得到了以下值[[234202]],[[51202]],[[5179]],在cv.findContours()函数中有三个参数,第一个是源图像,第二个是轮廓检索模式,第三个是轮廓逼近方法。上面,我们说过,轮廓是具有相同强度的形状的边界。第二个参数是应该作为Python列表传递的轮廓,第三个参数是轮廓的索引(在绘制单独的轮廓时很有用。...
2022-07-25 23:00:00
4973
2
原创 用于语义分割的Hausdorff损失函数
当谈到距离时,我们通常指的是最短距离,例如,如果一个点与多边形的距离是,我们通常假设是到最近点的距离。同样的逻辑适用于多边形与多边形之间如果两个多边形和彼此之间有一定的距离,我们通常理解的距离是的任何一点和的任何一点之间的。形式上,这被称为最小函数,因为和之间的距离D(A,B)=mina∈A{minb∈B{d(a,b)}}这个方程读起来像一个计算机程序对于中的每一点,求出它到中的任何一点的最小距离;最后,求得所有点中最小值。。图1图。......
2022-07-16 20:00:00
4381
2
原创 Google 人工智能基本原则
Google 渴望创造能够解决重要问题并帮助人们日常生活的技术。对人工智能和其他先进技术在赋予人们权力、广泛造福当代和后代以及为共同利益而努力方面的巨大潜力持乐观态度。将根据以下目标评估人工智能应用。认为人工智能应该:对社会有益。新技术的扩展范围越来越多地触及整个社会。人工智能的进步将在广泛的领域产生变革性影响,包括医疗保健、安全、能源、交通、制造和娱乐。当考虑人工智能技术的潜在发展和使用时,将考虑广泛的社会和经济因素,并将在Google认为总体可能的收益大大超过可预见的风险和不利因素的情况下进行。人工
2022-07-13 18:10:19
589
原创 数据增强系列(5)PyTorch和Albumentations用于语义分割
这个例子展示了如何使用Albumentations进行二分类语义分割。我们将使用牛津宠物数据集。任务是将输入图像的每个像素分类为宠物或背景。1.安装所需的库我们将使用TernausNet,这是一个为语义分割任务提供预训练的UNet模型的库。pip install ternausnetpip install albumentations==0.4.6 #下载这个版本的不会报错2.导入相关的库from collections import defaultdictimport copyimpo
2022-06-23 23:00:00
2215
1
原创 数据增强系列(6)使用Albumentations进行关键点增强
在本手册中,我们将展示如何将Albumentations应用于关键点增强问题。您可以对具有关键点的图像使用任何像素级增强,因为像素级增强不会影响关键点。注意:默认情况下,与关键点一起工作的扩展不会在转换后改变关键点的标签。如果关键点的标签是特异性的,这可能会造成问题。例如,如果您有一个名为left arm的关键点,并应用一个HorizontalFlip增强,您将得到一个具有相同左臂标签的关键点,但它现在看起来像一个右臂关键点。如果您使用这种类型的关键点,考虑使用来自albumentations-expe
2022-06-22 22:00:00
1926
1
原创 C++ 正则表达式教程:C++ 中的正则表达式与示例
C++ 正则表达式教程解释了 C++ 中正则表达式的工作,包括正则表达式匹配、搜索、替换、输入验证和标记化的功能。几乎所有的编程语言都支持正则表达式。 C++ 从 C++11 开始直接支持正则表达式。除了编程语言之外,大多数文本处理程序(如词法分析器、高级文本编辑器等)都使用正则表达式。在本教程中,我们将探讨正则表达式的一般细节以及 C++ 编程方面的细节。正则匹配中的基础符号^开头()组[]或,{}几次$结尾1. C++ 中的正则表达式 (Regex)正则表达式是包含一系列字符的表达
2022-05-10 23:00:00
13514
原创 Python 异常处理
1.概述Python 提供了两个非常重要的功能来处理 Python 程序中的任何意外错误并在其中添加调试功能 -异常处理- 这将在本教程中介绍。这是 Python 中可用的标准异常列表:标准异常。Assertions - 这将在以下介绍。标准异常列表:Exception:所有异常的基类StopIteration:当迭代器的 next() 方法不指向任何对象时引发。SystemExit:由 sys.exit() 函数引发。StandardError:除 StopIteration
2022-05-09 01:00:00
515
原创 OpenCV C++读写XML或YAML文件
本节我们将认识XML和YAML这两种文件类型。所谓XML,即eXtensible Markup Language,翻译成中文为“可扩展标识语言”。首先,XML是一种元标记语言。所谓元标记,就是开发者可以根据自身需要定义自己的标记,比如可以定义标记<book>、<name>。任何满足XML命名规则的名称都可以标记,这就向不同的应用程序打开了的大门。此外,XML是一种语义、结构化语言,它描述了文档的结构与语义。YAML是YAML Ain’t a Markup Language(YA
2022-05-08 00:30:00
2654
原创 C++异常处理
1.概述异常是在程序执行过程中出现的问题。C++ 异常是对程序运行时出现的异常情况的响应,例如尝试除以零。异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。C++ 异常处理建立在三个关键字之上:try、catch和throw。throw - 当出现问题时,程序会抛出异常。这是使用throw关键字完成的。catch - 程序在您要处理问题的程序中使用异常处理程序捕获异常。catch关键字表示捕获异常。try - try块标识将激活特定异常的代码块。它后面跟着一个或多个 catc
2022-05-07 22:52:18
1683
原创 C++读写ini文件
一般的ini配置文件由节、键、值组成。【参数】(键=值),例如 :key=value;【节】:所有的参数都是以节(section)为单位结合在一起的。所有的section名称都是独占一行,并且section名字都被方括号包围着([XXX])。在section声明后的所有parameters都属于该section。例如:[section1]所以一个包含节,键,值的简单ini配置文件,例如:[port]portName=port1port=1231.使用INIReader.h头文件1.IN
2022-05-07 00:30:00
6823
3
原创 C++读写文件
为了处理文件,首先,导入 fstream 库。 在这个库里面有三种数据类型:ofstream - 用于写入文件ifstream - 用于从文件中读取fstream - 用于读取和写入为了打开文件,我们使用 open() 函数。 该函数接收两个参数:文件名和文件打开方式。可以打开文件的模式如下:ios::in - 打开要读取的文件(ifstream 的默认值)ios::out - 打开要写入的文件(ofstream 的默认值)ios::binary - 以二进制模式打开文件ios::a
2022-05-06 00:38:46
15821
2
原创 智能指针Smart Pointer
1.智能指针std::unique_ptr(single ownership)std::shared_ptr(shared ownership)std::weak_ptr(temp/no ownership)C++11以后出现定义在头文件<memory>中1.0 为啥要有智能指针?普通指针void bar(Entity* e){ // who owns e // How long is e's life cycle? // Should I delete e?}v
2022-05-04 21:40:42
406
原创 VS Code设置OpenCV+Python
我们将在这里讨论如何在 Visual Studio Code 中为 OpenCV + Python 设置开发环境以及一些技巧。1. 安装1.1 要求PythonOpenCV-PythonVisual Studio Code1.2 Python(Python 解释器)首先,你需要python,如果你在windows上可以从官网获取,但是对于mac🍎或Linux🐧你,可能已经有了这个,确保python的版本大于3.6。在Windows上安装python时,请确保安装
2022-05-03 20:54:28
7429
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人