OpenCV 4.x API 详解与C++实例
文章平均质量分 86
结合实例详细解析OpenCV图像处理库的API函数,为OpenCV图像处理应用打下坚实基础
视觉&物联智能
专注计算机视觉、机器学习、视觉智能、嵌入式硬件、物联网(IoT)、M2M、机器人
展开
-
OpenCV4.x图像处理实例- 特征描述符匹配器及匹配点绘制
第二节 特征描述符匹配器及匹配点绘制OpenCV中关键点描述符的匹配器具有带有公共接口的包装器,可以轻松地在解决同一问题的不同算法之间进行切换。 本节专门介绍在多维空间中以向量表示的匹配描述符。 实现矢量描述符匹配器的所有对象都继承DescriptorMatcher接口以及相应的关键点和匹配点绘制接口。1、cv::drawKeypoints绘制关键点void cv::drawKeypoints(InputArray image,const std::vector< KeyPoint >原创 2021-02-27 10:11:44 · 1259 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-特征检测与描述
第一节 特征检测与描述OpenCV提供了丰富的特征检测算法,比如SIFT(Scale Invariant Feature Transform)、AffineFeature、AgastFeatureDetector、AKAZE、BRISK、FastFeatureDetector、GFTTDetector、KAZE、MSER、ORB、SimpleBlobDetector等1、SIFT尺度不变特征变换算法提取图像特征SIFT类继承了cv::Feature2D类,通过create静态方法创建。stati原创 2021-02-27 10:09:18 · 1341 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-物体跟踪
第二节 物体跟踪OpenCV的video模块提供了几种基于光流的物体跟踪方法。1、cv::buildOpticalFlowPyramid、cv::calcOpticalFlowPyrLK1)cv::buildOpticalFlowPyramid:构造可以传递给calcOpticalFlowPyrLK的图像金字塔。int cv::buildOpticalFlowPyramid (InputArray img,OutputArrayOfArrays pyramid,Size winSize,int m原创 2021-02-06 17:36:32 · 2360 阅读 · 1 评论 -
OpenCV 4.x API 详解与C++实例-运动分析
第一节 运动分析OpenCV的video模块提供了KNN和MOG2的运动分析算法。1、cv::createBackgroundSubtractorKNN创建基于KNN算法的背景提取器。Ptr cv::createBackgroundSubtractorKNN(int history = 500,double dist2Threshold = 400.0,bool detectShadows = true)参数名称参数描述history历史帧长度dist2Thresho原创 2021-02-06 17:33:20 · 503 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-物体检测
第十二节 物体检测Opencv的imgproc模块提供了matchTemplate模板匹配函数,该函数计算模板与待测图片的重叠区域的相似度。1、cv::matchTemplate将模板与重叠的图像区域进行比较。void cv::matchTemplate(InputArray image,InputArray templ,OutputArray result,int method,InputArray mask = noArray())该函数图像中滑动,并使用指定的方法将大小为w×hw×hw×h原创 2021-01-24 09:49:19 · 640 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-特征检测
第十一节 特征检测OpenCV的imgproc模块提供了图像特征检测函数,包括Canny边缘检测、直线检测、角点检测等。1、cv::Canny使用Canny算法对输入图像进行边缘检测。void cv::Canny(InputArray image,OutputArray edges,double threshold1,double threshold2,int apertureSize = 3,bool L2gradient = false)该函数使用Canny算法在输入图像中找到边缘,并在输出原创 2021-01-24 09:45:30 · 846 阅读 · 2 评论 -
OpenCV 4.x API 详解与C++实例-运动分析和对象跟踪
第十节 运动分析和对象跟踪OpenCV的imgproc模块提供了运动分析和对象跟踪的基础函数,可以根据这些函数对视频进行前景-背景分离,从而达到运动分析和对象跟踪的目的。1、cv::accumulate将多幅图像累加。void cv::accumulate(InputArray src,InputOutputArray dst,InputArraymask = noArray())该函数将src或其某些元素添加到dst中:dst(x,y)←dst(x,y)+src(x,y)ifmask(x,y原创 2021-01-24 09:41:12 · 914 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-结构分析和形状描述
第九节 结构分析和形状描述OpenCV的imgproc模块对物体描述提供了丰富的API,比如弧长计算、轮廓查找、质心查找等等。1、cv::findContours查找二值图像中的轮廓。void cv::findContours(InputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,int mode,int method,Point offset = Point())该函数使用算法(Satoshi Suzuki an原创 2021-01-10 12:56:02 · 1030 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-直方图
第八节 直方图OpenCV库提供了直方图统计、直方图比较、直方图均衡化、直方图反向投影等API。1、cv::calcHist计算一组数组的直方图。void cv::calcHist(const Mat * images,int nimages,const int * channels,InputArray mask,OutputArray hist,int dims,const int * histSize,const float ** ranges,bool uniform = true,boo原创 2021-01-10 12:48:28 · 448 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-平面剖分
第七节 平面剖分OpencCV提供了Subdiv2D类计算Delaunay三角剖分或Voronoi图。下面将通过一个示例演示Subdiv2D类的使用,关于Delaunay三角剖分和Voronoi图,可以参考相关的资料。#include <opencv2/imgproc.hpp>#include <opencv2/highgui.hpp>#include <iostream>using namespace cv;using namespace std;原创 2021-01-10 12:45:04 · 402 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-颜色映射
第六节 颜色映射人类的感知并不是为观察灰度图像的精细变化而建立的。 人眼对观察颜色之间的变化更为敏感,因此您通常需要重新着色灰度图像以获取有关它们的线索。 OpenCV现在带有各种颜色图,以增强计算机视觉应用程序中的可视化效果。在OpenCV中,只需要applyColorMap即可在给定图像上应用颜色图。void cv::applyColorMap(InputArray src,OutputArray dst,int colormap)参数如下:参数名称参数描述src输入原创 2021-01-10 12:44:12 · 404 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-颜色空间变换
第五节 颜色空间变换OpenCV提供了143种颜色空间相互转换的类型,比如RGB2BGR、BGR2GRAY等等。在本节中将介绍平时常用的几种颜色空间转换。1、cv::cvtColor将图像从一种颜色空间转换为另一种颜色空间。void cv::cvtColor(InputArray src,OutputArray dst,int code,int dstCn = 0)该函数将输入图像从一种颜色空间转换为另一种颜色空间。 在从RGB颜色空间转换的情况下,应明确指定通道的顺序(RGB或BGR)。 请注原创 2021-01-10 12:43:02 · 1925 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-绘图函数
第四节 绘图函数绘图函数适用于任意深度的矩阵/图像。 可以使用抗锯齿渲染形状的边界(目前仅针对8位图像实现)。 所有函数都包括用于彩色图像的参数color(使用RGB值(可以使用Scalar构造函数构造))和用于灰度图像的亮度。 对于彩色图像,通道顺序通常为蓝色,绿色,红色。 这就是imshow,imread和imwrite的期望。 因此,如果使用Scalar构造函数形成颜色,则其外观应类似于:Scalar(blue_component,green_component,red_component[,al原创 2021-01-07 00:12:32 · 942 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-图像变换
第三节 图像变换杂项本节主要介绍图像分割相关的一些API函数,比如theshold、watershed等。1、cv::threshold、cv::adaptiveThreshold1)cv::threshold:将固定级别阈值应用于每个数组元素。double cv::threshold(InputArray src,OutputArray dst,double thresh,double maxval,int type)threshold函数将固定级别的阈值应用于多通道数组或图像。经常应用于灰度原创 2021-01-07 00:08:12 · 500 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-图像几何变换
第二节 图像几何变换本节中的功能执行2D图像的各种几何变换。 它们不更改图像内容,而是使像素网格变形并将该变形的网格映射到目标图像。实际上,避免采样伪像,以从目标到源的相反顺序进行映射。 也就是说,对于目标图像的每个像素(x,y)(x,y)(x,y),函数计算源图像中相应原像素的坐标并复制像素值:dst(x,y)=src(fx(x,y),fy(x,y))\texttt{dst} (x,y)= \texttt{src} (f_x(x,y), f_y(x,y))dst(x,y)=src(fx(x,y),f原创 2021-01-04 17:09:27 · 627 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-图像滤波
第二节 图像滤波Opencv库的imgproc模块提供了很多经典的图像滤波函数,比如双边滤波、高斯滤波、Box滤波等等,同时也支持自定义滤波。本节中描述的函数和类用于对2D图像(表示为Mat)进行各种线性或非线性滤波操作。 这意味着对于源图像(通常为矩形)中的每个像素位置(x,y),都将考虑其邻域并将其用于计算响应。 对于线性滤波器,它是像素值的加权和。 在形态操作的情况下,它是最小值或最大值,依此类推。 计算出的响应存储在目标图像中相同位置(x,y)处。 这意味着输出图像将具有与输入图像相同的尺寸。原创 2021-01-04 16:43:03 · 565 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-图像与视频读取与保存
第二节 图像与视频读取与保存在前面,详细描述了OpenCV库的imgcodecs模块的图像读取、保存、编码、解码及highgui模块的基本操作。接下来将详细描述highgui模块对图像、视频的显示操作。1、图像显示cv::imshow:在指定的窗口中显示图像。void cv::imshow (const String & winname,InputArray mat)imshow函数在指定的窗口中显示图像。 如果窗口是使用cv :: WINDOW_AUTOSIZE标志创建的,则图像以其原原创 2021-01-03 14:32:02 · 761 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-HighGUI基础
第一节 HighGUI基础OpenCV将与操作系统,文件系统,摄像机之类的硬件进行交互的一些函数纳入HighGui(high-level graphical user interface)库中,有了HighGui,我们可以方便的打开窗口,显示图像,读出或者写入图像相关的文件。1、图像读取与保存OpenCV的imgcodecs模块提供了很多储存格式的图像读取与保存。经常使用的图像读取与保存函数:1)cv::imread:从指定的图像文件读取图像数据。如果文件不存在或不支持图像格式,则返回空的Mat。原创 2021-01-03 14:30:55 · 757 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-XML/YAML/JSON文件读写
第三节 XML/YAML/JSON文件读写您可以将各种OpenCV数据结构存储到XML、YAML或[JSON](http://www.json .org /)格式。 同样,可以存储和加载任意复杂的数据结构,其中包括OpenCV数据结构以及原始数据类型(整数和浮点数以及文本字符串)作为其元素。1、写入文件按以下步骤将某些内容写入XML,YAML或JSON:1)创建新的FileStorage并打开以进行写入2)就像使用STL流一样,使用流运算符<<写入所需的所有数据。3)使用File原创 2021-01-03 14:28:59 · 858 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-矩阵操作
第三节 矩阵操作OpenCV对矩阵操作提供了丰富的操作函数。本节将详细描述常用基本的矩阵和图像算子。1、cv::abs 和cv::absdiffcv::abs:计算矩阵每个元素的绝对值。float data[] = {-1,-2,-3,4,5,6,7,8,9};cv::Mat m1(cv::Size(3,3),CV_32FC1,data);cv::Mat m2 = cv::abs(m1);std::cout << "m2 = " << m2 << std:原创 2021-01-03 14:26:30 · 1410 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-Mat数据类型详解
第二节 Mat数据类型详解1、Mat数据类型描述我们有多种从现实世界中获取数字图像的方法:数码相机,扫描仪,计算机断层扫描和磁共振成像等等。 在每种情况下,我们(人类)看到的都是图像。 但是,当将其转换为数字设备时,我们记录的是图像每个点的数值。如下图所示:例如,在上图中,您可以看到汽车的镜子不过是一个包含所有像素点强度值的矩阵。OpenCV中的Mat是一个N维稠密数组,或多通道数组。它可用于存储实值或复值矢量和矩阵,灰度或彩色图像,体素体积,矢量场,点云,张量,直方图(尽管非常高维的直方图可能更好原创 2021-01-03 14:22:29 · 515 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-OpenCV基本数据类型
第一节 OpenCV基本数据类型1、OpenCV数据类型组成OpenCV数所类型主要由三种类型组成:1)基本数据类型,继承C++基本数据类型,如int、float、数组、矩阵等。2)辅助对象,如内存管理指针cv::Ptr类型、数据范围切片类型等。3)大型数组类型,是OpenCV的核心类型,如cv::Mat、cv::SparseMat,cv::Vec等类型2、OpenCV基本类型详解2.1 cv::Vec类型cv::Vec类型是OpenCV中简单的数据类型,属于固定向量,原创 2021-01-03 14:21:16 · 616 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-第一个OpenCV程序
第三章 第一个OpenCV程序1. 运行C++程序1)启动QtCreator,建立一个Non-Qt项目:按照提示直至项目创建完成。2)导入OpenCV库程序的依赖库已经导入完毕。3)编码代码#include <iostream>#include <opencv2/opencv.hpp>using namespace std;int main(){ // 读取图片 cv::Mat image = cv::imread("resource原创 2021-01-03 14:18:09 · 308 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-OpenCV开发环境搭建
第二节 OpenCV开发环境搭建1、硬件环境CPU:Intel Core I7-9750HGPU:Nvidia-Geforce RTX2060OS:Windows 10 pro x64硬盘:SSD 1TB内存:32GB2、开发工具1)Visual Studio 2019 pro 2)Qt 5.15.23)CMake 3.19.14)Git for windows5)Anoconda 36)JDK 87)Apache Ant8)Visual Studio Code下载并安装好上原创 2021-01-03 14:15:01 · 621 阅读 · 0 评论 -
OpenCV 4.x API 详解与C++实例-OpenCV概述
第一节 OpenCV概述1、什么是OpenCVOpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。 OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速在商业产品中使用机器感知。 作为BSD许可的产品,OpenCV使企业可以轻松地使用和修改代码。该库具有2500多种优化算法,其中包括一整套经典和最新的计算机视觉和机器学习算法。 这些算法可用于检测和识别面部,识别对象,对视频中的人为行为进行分类,跟踪摄像机的运动,跟踪运动的对象,提取对象的3D模型,从立体摄像机生成3原创 2021-01-03 14:11:08 · 455 阅读 · 0 评论