OpenCV
文章平均质量分 85
求则得之,舍则失之
这个作者很懒,什么都没留下…
展开
-
基于OpenCV的傅里叶变换
傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在图像中变化剧烈的地方(比如边界)经过傅里叶别换后就相当与高频,反之变化缓慢的地方就是低频。傅里叶变换可以将图像变换为频率域, 傅立叶反变换将频率域变换为空间域。原创 2023-06-27 20:30:00 · 1443 阅读 · 0 评论 -
OpenCV基础(28)使用OpenCV进行摄像机标定Python和C++
摄像头是机器人、监控、太空探索、社交媒体、工业自动化甚至娱乐业等多个领域不可或缺的一部分。 对于许多应用,必须了解相机的参数才能有效地将其用作视觉传感器。在这篇文章中,您将了解相机校准所涉及的步骤及其意义。 我们还共享 C++ 和 Python 代码以及棋盘图案的示例图像。1.什么是相机标定估计相机参数的过程称为相机标定。这意味着我们拥有确定现实世界中的 3D 点与其在该校准相机捕获的图像中对应的 2D 投影(像素)之间的准确关系所需的有关相机的所有信息(参数或系数)。通常这意味着恢复两种参数:原创 2023-02-21 18:30:00 · 5580 阅读 · 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 · 820 阅读 · 0 评论 -
使用OpenCV对点集从左上到右下排序
该函数接受图像img、中心点坐标centers、图像的段数row_amt和图像高度row_h作为输入。它将返回row_amt数组(根据它们的x获取图像的高度,用于定义的get_rows函数,并定义一个计数变量countcount = 0。原创 2023-01-31 20:15:00 · 1857 阅读 · 0 评论 -
基于OpenCV和imageio实现将视频转为GIF
在这个文章中,我们将学习如何从基于OpenCV和imageio实现将视频转为GIF。原创 2022-10-28 23:00:00 · 917 阅读 · 0 评论 -
使用OpenCV如何确定一个对象的方向
在本教程中,我们将构建一个程序,该程序可以使用流行的计算机视觉库 OpenCV 确定对象的方向(即以度为单位的旋转角度)。最常见的现实世界用例之一是当您想要开发机械臂的取放系统时。确定一个物体在传送带上的方向是确定合适的抓取、捡起物体并将其放置在另一个位置的关键。原创 2022-10-26 22:45:00 · 4283 阅读 · 1 评论 -
OpenCV的cv2.minAreaRect解析
在这个文章中,我们将学习如何在感兴趣区域周围画最小面积矩形框。原创 2022-08-16 22:00:00 · 14468 阅读 · 1 评论 -
根据轮廓创建旋转框和椭圆
在这篇文章中,我们将学习。原创 2022-08-05 23:00:00 · 500 阅读 · 0 评论 -
OpenCV 连通分量标记和分析
在本教程中,您将学习如何使用 OpenCV 执行连通分量标记和分析。。连通分量标记(也称为连通分量分析、斑点提取或区域标记)是图论的一种算法应用,用于确定二进制图像中“斑点”状区域的连通性。我们经常在与使用轮廓相同的情况下使用连通分量分析;然而,连通分量标记通常可以让我们对二值图像中的斑点进行更细粒度的过滤。在使用轮廓分析时,我们经常受到轮廓层次结构的限制(即一个轮廓包含在另一个轮廓中)。通过连通分量分析,我们可以更轻松地分割和分析这些结构。...原创 2022-08-04 22:00:00 · 1874 阅读 · 2 评论 -
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 · 6534 阅读 · 0 评论 -
OpenCV分水岭分割算法2
分水岭算法是用于分割的经典算法,在提取图像中粘连或重叠的对象时特别有用,例如上图中的硬币。使用传统的图像处理方法,如阈值和轮廓检测,我们将无法从图像中提取每一个硬币,但通过利用分水岭算法,我们能够检测和提取每一个硬币。在使用分水岭算法时,我们必须从用户定义的标记开始。这些标记可以通过点击手动定义,或者我们可以使用阈值和/或形态学操作等方法自动或启发式定义它们。基于这些标记,分水岭算法将输入图像中的像素视为地形——该方法通过“淹没”山谷,从标记开始向外移动,直到不同标记相遇。...原创 2022-07-30 23:00:00 · 1878 阅读 · 1 评论 -
多边形点测试
输入轮廓。要测试的点。如果为真,该函数估计从点到最近的轮廓边缘的符号距离。否则,函数只检查点是否在轮廓线内。该函数确定点是在轮廓线内、外,还是位于边缘(或与顶点重合)。它会相应地返回正(内部)、负(外部)或零(边缘)值。当时,返回值分别是**+1**,和。否则,返回值是点和最近的轮廓边缘之间的带符号距离。......原创 2022-07-28 09:09:06 · 614 阅读 · 0 评论 -
基于距离变换和分水岭算法的图像分割
基于距离变换和分水岭算法的图像分割。原创 2022-07-29 22:00:00 · 247 阅读 · 0 评论 -
基于标记的分水岭分割算法
分水岭技术是一种众所周知的分割算法,特别适用于提取图片中的相邻或重叠对象。使用分水岭方法时,我们必须从用户定义的标记开始。这些标记可以使用点击手动定义,也可以使用阈值或形态学处理方法定义。分水岭技术将输入图像中的像素视为基于这些标记的局部极小值(称为地形)——该方法从标记向外“淹没”山谷,直到各种标记的山谷相遇。为了产生准确的分水岭分割,必须准确地设置标记。我们使用一种基于OpenCV标记的分水岭技术来指定哪些谷点应该合并,哪些不应该合并。它是一种交互式图像分割,而不是自动图像分割。......原创 2022-07-28 22:00:00 · 2109 阅读 · 1 评论 -
基于OpenCV的轮廓检测(3)
这一次,我们学习轮廓的层次轮廓,即轮廓的父子关系。原创 2022-07-27 21:00:00 · 1280 阅读 · 0 评论 -
基于OpenCV的轮廓检测(2)
在本章中,我们将学习。原创 2022-07-26 23:00:00 · 1141 阅读 · 3 评论 -
基于OpenCV的轮廓检测(1)
现在如果对returnPoints=False做同样的事情,我得到以下结果[[129],[67],[0],[142]]。当returnPoints=True,我得到了以下值[[234202]],[[51202]],[[5179]],在cv.findContours()函数中有三个参数,第一个是源图像,第二个是轮廓检索模式,第三个是轮廓逼近方法。上面,我们说过,轮廓是具有相同强度的形状的边界。第二个参数是应该作为Python列表传递的轮廓,第三个参数是轮廓的索引(在绘制单独的轮廓时很有用。...原创 2022-07-25 23:00:00 · 4427 阅读 · 2 评论 -
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 · 2437 阅读 · 0 评论 -
Ubuntu基于OpenCV C++配置VS Code
本文讲述Ubuntu OS在Visual Studio Code IDE中使用与c++OpenCV。1. Part1:安装OpenCVStep1:打开您的终端并输入以下命令,如下图所示。 (即使用cd命令移动到您的主目录并安装cmake和make)cdsudo apt install -y cmakesudo apt install -y make(因为我已经安装了它们,所以我在控制台中收到了如上所示的消息)Step2:从github页面https://github.com/open原创 2022-04-26 23:30:00 · 1174 阅读 · 0 评论 -
Windows 10 上使用 OpenCV C++ 的 VS Code
1.简介OpenCV由于其速度和直观的API,在图像处理领域是一个强大的工具。然而,配置 OpenCV 是一项艰巨的工作,尤其是在 Windows 上。为了方便您在 VS Code 上配置 OpenCV,我决定写这篇文章来教您。2.配置本教程假设您使用以下配置:OS: Windows 10 64-bitCompiler: Mingw-w64 (Specifically, x86_64-8.1.0-posix-seh-rt_v6-rev0)Compiler binaries' path: C:\原创 2022-04-25 23:00:00 · 4594 阅读 · 0 评论 -
目标跟踪(8)使用 dlib 进行多目标跟踪
在本教程中,您将学习如何使用 dlib 库在实时视频中有效地跟踪多个对象。我们当然可以使用 dlib 跟踪多个对象;但是,为了获得可能的最佳性能,我们需要利用多处理并将对象跟踪器分布在处理器的多个内核上。正确利用多处理使我们能够将 dlib 多对象跟踪每秒帧数 (FPS) 提高 45% 以上!1.使用 dlib 进行多目标跟踪在本指南的第一部分,我将演示如何实现一个简单、朴素的 dlib 多对象跟踪脚本。该程序将跟踪视频中的多个对象;但是,我们会注意到脚本运行速度有点慢。 为了提高我们的 FPS,我原创 2022-03-13 18:00:00 · 3164 阅读 · 0 评论 -
目标跟踪(7)使用 OpenCV 进行简单的对象跟踪
1.简述目标跟踪的过程是:1.获取对象检测的初始集(例如边界框坐标的输入集)2.为每个初始检测创建唯一的ID3.然后跟踪每一个在视频中移动的对象,保持唯一ID的分配此外,对象跟踪允许我们为每个跟踪对象应用唯一 ID,从而使我们能够计算视频中的唯一对象。对象跟踪对于构建人员计数器至关重要。理想的目标跟踪算法是:1.只要求一次对象检测阶段(即,当对象最初被检测时)2.将非常快-比运行实际的物体检测器本身快得多3.能够处理当跟踪对象“消失”或移动到视频帧的边界之外的情况4.抗遮挡能力强原创 2022-03-09 15:19:14 · 4932 阅读 · 0 评论 -
目标跟踪(6)OpenCV 人员计数器
在本教程中,您将学习如何使用 OpenCV 和 Python 构建人员计数器。使用 OpenCV,我们将实时计算进或出百货商店的人数。在今天博客文章的第一部分,我们将讨论如何利用两者来创建更准确的人员计数器。之后,我们将查看项目的目录结构,然后实施整个人员计数项目。最后,我们将检查将 OpenCV 的人数统计应用到实际视频中的结果。1.了解对象检测与对象跟踪在继续本教程的其余部分之前,您必须了解对象检测和对象跟踪之间的根本区别。当我们应用对象检测时,我们是在确定一个对象在图像/帧中的位置。与目标跟踪原创 2022-03-09 10:53:58 · 6787 阅读 · 1 评论 -
目标跟踪(5)使用 Opencv 和 Python 进行对象跟踪
在本教程中,我们将学习如何基于 Opencv 和 Python 实现对象跟踪。首先必须明确目标检测和目标跟踪有什么区别:1.目标检测是每一帧每一帧的检测。2.对象跟踪会逐帧跟踪,但会一次又一次地保留对象所在位置的历史记录我们将首先讨论对象检测,然后讨论如何将对象跟踪应用于检测。1.有哪些可能的应用?可能有不同的应用,例如,计算某个区域有多少人,检查传送带上有多少物体通过,或者计算高速公路上的车辆。当然,看过本教程后,您会很容易地想到数以千计的想法应用于现实生活或可能应用于工业。2.我们需原创 2022-03-11 20:00:00 · 3449 阅读 · 1 评论 -
目标跟踪(4)使用dlib进行对象跟踪
本教程将教您如何使用 dlib 和 Python 执行对象跟踪。阅读今天的博文后,您将能够使用 dlib 在实时视频中跟踪对象。1.执行一次对象检测(或每N帧一次)2.然后应用专用的跟踪算法,可以在后续帧中当对象移动时保持跟踪,而无需执行对象检测这样的方法可行吗?答案是肯定的,特别是我们可以使用 dlib 的相关性跟踪算法的实现。在今天博文的其余部分,您将学习如何应用 dlib 的相关性跟踪器来实时跟踪视频流中的对象。1.使用 dlib 进行对象跟踪我们将从今天的教程开始,简要讨论 dli原创 2022-03-10 20:00:00 · 1022 阅读 · 0 评论 -
目标跟踪(3)MultiTracker : 基于 OpenCV (C++/Python) 的多目标跟踪
在这篇文章中,我们将介绍如何使用通过 MultiTracker 类实现的 OpenCV 的多对象跟踪 API。我们将共享C++ 和 Python 代码。1.为什么我们需要多目标跟踪大多数计算机视觉和机器学习的初学者都学习对象检测。如果您是初学者,您可能会想为什么我们需要对象跟踪。我们不能只检测每一帧中的对象吗?让我们来探究一下跟踪是有用的几个原因。首先,当在视频帧中检测到多个对象(例如人)时,跟踪有助于跨帧建立对象的身份。其次,在某些情况下,对象检测可能会失败,但仍可能跟踪对象,因为跟踪考虑了对象原创 2022-03-09 19:00:00 · 2961 阅读 · 6 评论 -
目标跟踪(2)GOTURN:基于深度学习的目标跟踪
在这篇文章中,我们将了解一种名为 GOTURN 的基于深度学习的对象跟踪算法。 GOTURN 的原始实现是在 Caffe 中,但它已被移植到 OpenCV 跟踪 API,我们将使用这个 API 在 C++ 和 Python 中演示 GOTURN。1. 什么是目标跟踪?对象跟踪的目标是跟踪视频序列中的对象。使用视频序列的帧和边界框来初始化跟踪算法,以指示我们感兴趣跟踪的对象的位置。跟踪算法为所有后续帧输出一个边界框。2. 什么是GOTURN?GOTURN 是 Generic Object Tracki原创 2022-03-08 22:00:00 · 2361 阅读 · 0 评论 -
目标跟踪(1)基于OpenCV实现单目标跟踪
在本教程中,我们将学习使用OpenCV跟踪对象。OpenCV 3.0开始引入跟踪API。我们将学习如何和何时使用OpenCV 4.2中可用的8种不同的跟踪器- BOOSTING, MIL, KCF, TLD, MEDIANFLOW, GOTURN, MOSSE和CSRT。我们还将学习现代跟踪算法背后的一般理论。1.什么是目标跟踪?简单地说,在视频的连续帧中定位一个对象称为跟踪。这个定义听起来很简单,但在计算机视觉和机器学习中,跟踪是一个非常广泛的术语,它包含了概念相似但技术不同的想法。例如,以下所有不原创 2022-03-07 20:00:00 · 12530 阅读 · 4 评论 -
使用C++和python实现四种Yolo目标检测
作者GitHub作者Blog原创 2022-03-03 17:35:42 · 1083 阅读 · 0 评论 -
基于OpenCV实现视频的循环播放
本文将介绍基于OpenCV实现视频的循环播放。有以下三个步骤:首先设置一个frame的设置参数frame_counter,值为0在读帧时间,将每次加一当 frame_counter 达到视频总帧数时,将当前的帧设置为 0视频总帧数:CAP_PROP_FRAME_COUNT设置当前的帧:CAP_PROP_POS_FRAMESVideoCaptureProperties通用属性标识符参考地址。1.Python+OpenCV实现import cv2cap = cv2.VideoCaptu原创 2022-02-24 19:00:00 · 3200 阅读 · 2 评论 -
基于Python、OpenCV 和 Numpy 实现小图像覆盖在大图像上
在本文中,我将展示如何将对象从一个图像添加到另一个图像。为此,我们需要:背景图像;对象对象的mask(mask为黑色,其他空间为白色)。在我们的例子中,背景是一张大海的照片,对象是一杯咖啡。在这里,他们是:下载地址:background.jpg, cup.png,cup_mask.png您还可以查看这个简短的视频教程,了解如何在 Photoshop 的帮助下创建对象的mask。1.导入相关库现在,使用jupiter notebook创建一个新文件。首先,我们需要导入必要的模块:imp原创 2022-02-08 17:10:44 · 7156 阅读 · 2 评论 -
基于cv2.VideoCapture 和 OpenCV 得到更快的 FPS之Webcam篇
使用线程处理 I/O 繁重的任务(例如从相机传感器读取帧)是一种已经存在数十年的编程模型。例如,如果我们要构建一个网络爬虫来抓取一系列网页(根据定义,这个任务是 I/O 绑定的),我们的主程序将生成多个线程来处理并行下载这组页面,而不是仅依靠单个线程(我们的“主线程”)按顺序下载页面。这样做可以让我们更快地抓取网页。同样的概念也适用于计算机视觉中的从相机读取帧——我们可以简单地通过创建一个新线程来提高我们的 FPS,该线程轮询相机以获取新帧,而我们的主线程处理当前帧。这是一个简单的概念,但它在 Ope原创 2022-01-26 09:38:06 · 2513 阅读 · 2 评论 -
基于cv2.VideoCapture 和 OpenCV 得到更快的 FPS之文件篇
您是否曾经通过 OpenCV 的 cv2.VideoCapture 函数处理视频文件并发现读取帧感觉缓慢?您的整个视频处理管道一直在运行,每秒处理的帧数不能超过一到两帧——即使您没有进行任何类型的计算成本高昂的图像处理操作。根据您的视频文件类型、安装的编解码器,机器的物理硬件,大部分视频处理管道的消耗是来自于读取和解码视频文件中的下一帧。这只是计算上的浪费——还有更好的方法。在今天博文的其余部分,我将演示如何使用线程和队列数据结构将视频文件的 FPS 速率提高 52% 以上!1.使用 cv2.Vid原创 2022-01-26 08:46:30 · 8005 阅读 · 0 评论 -
使用Python和OpenCV查找相机到物体/标记物的距离(1)
在这篇博文中,我将向你展示如何想出一个解决方案来计算我们的相机到一个已知物体或标记物的距离。1.物体/标记与相机距离的三角形相似性为了确定从我们的相机到一个已知物体或标记物的距离,我们将利用三角形相似性。三角形相似性大致是这样的:假设我们有一个已知宽度为w的标记或物体,然后将这个标记放置在距离相机D的距离处。我们用相机拍下物体的照片,然后测量它的视宽度(像素P)。这允许我们推导出相机的感知焦距F:F = (P x D) / W例如,假设我放置一张8.5 x 11英寸的标准纸(水平;W = 11),.原创 2021-12-20 16:11:44 · 4096 阅读 · 1 评论 -
OpenCV基础(27)CommandLineParser使用
该类用于命令行解析。主要是为了方便用户在命令行使用过程中减少工作量,可以在程序文件中直接指定命令行中的参数指令,不用再在命令行中输入参数或者说可以把一些固定的参数放在这个类里,常变的在命令行中输入。1.构造函数cv::CommandLineParser::CommandLineParser(int argc, const char *const argv[], const String & keys ) argc:命令行参数的数量(来自main(原创 2021-12-01 17:24:05 · 1283 阅读 · 4 评论 -
python3鼠标左键点击图片,获取当前位置的像素坐标
# coding: utf-8import cv2# 回调函数def on_EVENT_LBUTTONDOWN(event, x, y, flags, param): # 鼠标左键按下时候的操作 if event == cv2.EVENT_LBUTTONDOWN: xy = "%d,%d" % (x, y) print(xy) # 控制台显示当前像素坐标 cv2.circle(img, (x, y), 1, (255, 0, 0), th原创 2021-11-26 09:57:32 · 922 阅读 · 0 评论 -
OpenCV基础(26)使用 Python 和 OpenCV 顺时针排序坐标
1.使用 Python 和 OpenCV 顺时针排序坐标这篇博文的目标有两个:1、主要目的是学习如何按照左上、右上、右下和左下的顺序排列与旋转边界框相关联的(x, y)坐标。按照这样的顺序组织边界框坐标是执行透视转换或匹配对象角点(例如计算对象之间的距离)等操作的先决条件。2、第二个目的是解决 imutils 包的 order_points 方法中一个微妙的、难以发现的错误。话虽如此,让我们通过回顾按顺时针顺序排列边界框坐标的原始的、有缺陷的方法来开始这篇博文。2.原始(有缺陷的)方法在我们原创 2021-10-17 00:36:54 · 3766 阅读 · 0 评论 -
imutils基础(7)使用 OpenCV 查找轮廓中的极值点
今天,我将使用 OpenCV 和 Python 根据轮廓查找极值点。在本博客的其余部分,我将演示如何根据轮廓找到极北、极南、极东和极西 (x, y) 坐标,如本博文顶部的图像所示。虽然这项技能本身并不是很有用,但它通常用作更高级计算机视觉应用程序的预处理步骤。这种应用程序的一个很好的例子是手势识别:计算沿手部轮廓的极坐标计算沿手部轮廓的极坐标计算沿手部轮廓的极坐标在上图中,我们从图像中分割了皮肤/手,计算了手轮廓的凸包(蓝色轮廓),然后沿着凸包找到了极值点(红色圆圈)。我们的示例图像包含一只手.原创 2021-10-16 20:51:25 · 2321 阅读 · 2 评论 -
imutils基础(6)使用 Python 和 OpenCV 将 URL 转换为图像
在本文中我会告诉你到底是如何从 URL 下载图像,然后将其转换为 OpenCV 格式(无需将其写入磁盘然后再读回),我们还将看到我们如何利用 scikit-image 从 URL 下载图像,以及可能会在此过程中您常见的“陷阱”。1.方法1:OpenCV、NumPy 和 urllib我们将探索的第一种方法是使用 OpenCV、NumPy 和 urllib 库将 URL 转换为图像。打开一个新文件,命名为 url_to_image.py ,让我们开始吧:# 导入包import numpy as npi原创 2021-10-15 23:34:27 · 328 阅读 · 0 评论 -
imutils基础(5)基于OpenCV与imutils实现蒙太奇
今天我们将学习如何使用OpenCV和imutils包构建图像的蒙太奇。1.使用 OpenCV 实现蒙太奇今天的博客文章有四个主要部分。在第一部分中,我们将学习如何从保存在磁盘上的图像数据集构建图像路径列表。然后,我们将使用build_montages函数获取这个图像列表并创建实际的蒙太奇。接下来,我们将在屏幕上显示蒙太奇。最后,我将提供一个使用蒙太奇在 OpenCV 中显示图像的示例。2.使用 OpenCV 创建蒙太奇首先,打开一个新文件,将其命名为 montage_example.py ,原创 2021-10-15 22:50:23 · 505 阅读 · 0 评论