自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (2)
  • 收藏
  • 关注

转载 C++版本OpenCv教程(十九)绘制几何图形

绘制圆形圆形是我们在平时中最常使用的图形之一,OpenCV 4中提供了circle()函数用于绘制圆型,其函数的函数原型在代码清单3-40中给出。void cv::circle(InputOutputArray img, Point center, int radius, const Scalar & color, int thickness = 1,

2020-12-30 10:16:53 1390

转载 C++版本OpenCv教程(十八)极坐标变换

极坐标变换就是将图像在直角坐标系与极坐标系中互相变换,形式如图3-26所示,它可以将一圆形图像变换成一个矩形图像,常用于处理钟表、圆盘等图像。圆形图案边缘上的文字经过及坐标变换后可以垂直的排列在新图像的边缘,便于对文字的识别和检测。OpenCV 4中提供了warpPolar()函数用于实现图像的极坐标变换,该函数的函数原型在代码清单3-38中给出。void cv::warpPolar(InputArray src, OutputArray dst,

2020-12-30 10:04:18 1215

转载 C++版本OpenCv教程(十七)图像透视变换

本小节将介绍图像的另一种变换——透视变换。透视变换是按照物体成像投影规律进行变换,即将物体重新投影到新的成像平面,示意图如图3-24所示。透视变换常用于机器人视觉导航研究中,由于相机视场与地面存在倾斜角使得物体成像产生畸变,通常通过透视变换实现对物体图像的校正。透视变换中,透视前的图像和透视后的图像之间的变换关系可以用一个3×3的变换矩阵表示,该矩阵可以通过两张图像中四个对应点的坐标求取,因此透视变换又称作“四点变换”。与仿射变换一样,OpenCV 4中提供了根据四个对应点求取变换矩阵的getPerspec

2020-12-30 09:41:15 2734

转载 C++版本OpenCv教程(十六)图像仿射变换

介绍完图像的缩放和翻转后,接下来将要介绍图像的旋转,但是在OpenCV 4中并没有专门用于图像旋转的函数,而是通过图像的仿射变换实现图像的旋转。实现图像的旋转首先需要确定旋转角度和旋转中心,之后 确定旋转矩阵,最终通过仿射变换实现图像旋转。针对这个流程,OpenCV 4提供了getRotationMatrix2D()函数用于计算旋转矩阵和warpAffine()函数用于实现图像的仿射变换。首先介绍计算旋转矩阵getRotationMatrix2D()函数,该函数的函数原型在代码清单3-31中给出。Mat

2020-12-28 09:21:02 1911

转载 C++版本OpenCv教程(十五)LUT查找表

前面介绍的阈值比较方法中只有一个阈值,如果需要与多个阈值进行比较,就需要用到显示查找表(Look-Up-Table,LUT)。LUT查找表简单来说就是一个像素灰度值的映射表,它以像素灰度值作为索引,以灰度值映射后的数值作为表中的内容。例如我们有一个长度为5的存放字符的数组,LUT查找表就是通过这个数组将0映射成a,将1映射成b,依次类推,其映射关系为。在OpenCV 4中提供了LUT()函数用于实现图像像素灰度值的LUT查找表功能,在代码清单3-20中给出了该函数的原型。 - void cv::LUT(

2020-12-27 23:29:40 843

转载 C++版本OpenCv教程(十四)图像二值化

我们在上一节程序中生成了一张只有黑色和白色的图像,这种“非黑即白”的图像像素的灰度值无论在什么数据类型中只有最大值和最小值两种取值,因此称其为二值图像。二值图像色彩种类少,可以进行高度的压缩,节省存储空间,将非二值图像经过计算变成二值图像的过程称为图像的二值化。在OpenCV 4中提供了threshold()和adaptiveThreshold()两个函数用于实现图像的二值化,我们首先介绍threshold()函数的使用方法,该函数的函数原型在代码清单3-17中给出。double cv::threshol

2020-12-27 22:50:44 9469 1

转载 C++版本OpenCv教程(十三)两图像间的像素操作

两张图像的比较运算OpenCV 4中提供了求取两张图像每一位像素较大或者较小灰度值的max()、min()函数,这两个函数分别比较两个图像中每一位元素灰度值的大小,保留较大(较小)的灰度值,这两个函数的函数原型在代码清单3-13中给出。void cv::max(InputArray src1,InputArray src2,OutputArray dst)void cv::min(InputArray src1,InputArray src2,OutputArray dst)src1:第一个图像

2020-12-27 21:52:00 845

转载 C++版本OpenCv教程(十二)图像像素统计

我们可以将数字图像理解成一定尺寸的矩阵,矩阵中每个元素的大小表示了图像中每个像素的亮暗程度,因此统计矩阵中的最大值,就是寻找图像中灰度值最大的像素,计算平均值就是计算图像像素平均灰度,可以用来表示图像整体的亮暗程度。因此针对矩阵数据的统计工作在图像像素中同样具有一定的意义和作用。在OpenCV 4中集成了求取图像像素最大值、最小值、平均值、均方差等众多统计量的函数,接下来将详细介绍这些功能的相关函数。寻找图像像素最大值与最小值OpenCV 4提供了寻找图像像素最大值、最小值的函数minMaxLoc(),

2020-12-27 16:04:42 2673 1

转载 C++版本OpenCv教程(十一)多通道分离与合并

在图像颜色模型中不同的分量存放在不同的通道中,如果我们只需要颜色模型的某一个分量,例如只需要处理RGB图像中的红色通道,可以将红色通道从三通道的数据中分离出来再进行处理,这种方式可以减少数据所占据的内存,加快程序的运行速度。同时,当我们分别处理完多个通道后,需要将所有通道合并在一起重新生成RGB图像。针对图像多通道的分离与混合,OpenCV 4中提供了split()函数和merge()函数用于解决这些需求。多通道分离函数split()OpenCV 4中针对多通道分离函数split()有两种重载原型,在代

2020-12-23 23:49:54 1296

转载 C++版本OpenCv教程(十)颜色模型与转换

目录RGB颜色模型YUV颜色模型RGB颜色模型前面对于RGB颜色模型已经有所介绍,该模型的命名方式是采用三种颜色的英文首字母组成,分别是红色(Red)、绿色(Green)和蓝色(Blue)。虽然该颜色模型的命名方式是红色在前,但是在OpenCV中却是相反的顺序,第一个通道时蓝色(B)分量,第二个通道时绿色(G)分量,第三个通道时红色(R)分量。根据存储顺序的不同,OpenCV 4中提供了这种顺序的反序格式,用于存储第一个通道是红色分量的图像,但是这两种格式的图像的颜色空间是相同的,颜色空间如图3-1所示

2020-12-23 14:15:20 1421

转载 C++版本OpenCv教程(九)保存和读取XML和YMAL文件

除了图像数据之外,有时程序中的尺寸较小的Mat类矩阵、字符串、数组等数据也需要进行保存,这些数据通常保存成XML文件或者YAML文件。本小节中将介绍如何利用OpenCV 4中的函数将数据保存成XML文件或者YAML文件以及如何读取这两种文件中的数据。XML是一种元标记语言,所谓元标记就是使用者可以根据自身需求定义自己的标记,例如可以用、等标记来定义数据的含义,例如用24来表示age数据的数值为24。XML是一种结构化的语言,通过XML语言可以知道数据之间的隶属关系,例如100150表示在color数据中

2020-12-22 23:18:56 1339

转载 C++版本OpenCv教程(八)图像的保存&视频的保存

目录图像的保存视频的保存图像的保存OpenCV提供imwrite()函数用于将Mat类矩阵保存成图像文件,该函数的函数原型在代码清单2-30中给出。bool cv :: imwrite(const String& filename,InputArray img,Const std::vector<int>& params = std::vector<int>())filename:保存图像的地址和文件名,包含图像格式img:将要保存的Mat类矩阵变量p

2020-12-22 21:14:44 8091

转载 C++版本OpenCv教程(七)视频数据的读取&摄像头的直接调用

目录视频数据的读取摄像头的直接调用视频数据的读取虽然视频文件是由多张图片组成的,但是imread()函数并不能直接读取视频文件,需要由专门的视频读取函数进行视频读取,并将每一帧图像保存到Mat类矩阵中,下面的代码中给出了VideoCapture类在读取视频文件时的构造方式。cv :: VideoCapture :: VideoCapture(); //默认构造函数cv :: VideoCapture :: VideoCapture(const String& filename,int api

2020-12-22 15:19:57 2484

转载 C++版本OpenCv教程(六)namedWindow函数&imshow函数的使用

目录图像窗口函数namedWindow图像显示函数imshow图像窗口函数namedWindow在我们之前的程序中并没有见到窗口函数,因为我们在显示图像时如果没有主动定义图像窗口,程序会自动生成一个窗口用于显示图像,然而有时我们需要在显示图像之前对图像窗口进行操作,例如添加滑动条,此时就需要提前创建图像窗口。创建窗口函数的原型。void cv::namedWindow(const String & winname,int flags = WINDOW_AUTOSIZE)winname:

2020-12-22 10:06:42 7593 1

转载 C++版本OpenCv教程(五)图像读取函数imread

我们在前面已经见过了图像读取函数imread()的调用方式,这里我们给出函数的原型。cv::Mat cv::imread(const String & filename,int flags=IMREAD_COLOR)filename:需要读取图像的文件名称,包含图像地址、名称和图像文件扩展名flags:读取图像形式的标志,如将彩色图像按照灰度图读取,默认参数是按照彩色图像格式读取,可选参数在表2-3给出。函数用于读取指定的图像并将其返回给一个Mat类变量,如果图像文件不存在、破损或者

2020-12-22 09:16:54 2431

转载 C++版本OpenCv教程(四)4种读取Mat类元素的的方法

目录通过at方法读取Mat类矩阵中的元素通过指针ptr读取Mat类矩阵中的元素通过迭代器访问Mat类矩阵中的元素通过矩阵元素地址定位方式访问元素对于Mat类矩阵的读取与更改,我们已经在矩阵的循环赋值中见过如何用at方法对矩阵的每一位进行赋值,这只是OpenCV提供的多种读取矩阵元素方式中的一种,本小节将详细介绍如何读取Mat类矩阵中的元素,并对其数值进行修改。在学习如何读取Mat类矩阵元素之前,首先需要知道Mat类变量在计算机中是如何存储的。多通道的Mat类矩阵是一个类似于三维的数据,而计算机的存储空间是

2020-12-13 15:12:42 10443 1

原创 C++版本OpenCv教程(三)Mat类支持的运算

在处理数据时需要对数据进行加减乘除运算,例如对图像进行滤波、增强等操作都需要对像素级别进行加减乘除运算。为了方便运算,Mat类变量支持矩阵的加减乘除运算,即我们在使用Mat类变量时,将其看做普通的矩阵即可,例如Mat类变量与常数相乘遵循矩阵与常数相乘的运算法则。Mat类与常数运算时,可以直接通过加减乘除符号实现。Mat类的加减法运算cv::Mat a = (cv::Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);cv::Mat b =

2020-12-13 14:37:29 2977

转载 Ubuntu16.04环境下STM32和ROS间的串口通信

目录前言介绍<1> 最终协议的样子<2> 本方案提供的API实现的功能原理<1> 简要叙述<2> 这里是如何使用共用体的?前期准备<1> 确保硬件连接<2> 查看串口设备方法<3> 串口权限设置方法代码部署<1> STM32端<2>ROS端代码测试<1>确保设备连接:<2>打开新终端,启动ros master<3>打开新终端,启动测试功能包参考文献前言在实际的数

2020-12-13 13:16:28 2641 3

转载 C++版本OpenCv教程(二)Mat类构造与赋值

目录Mat类的构造1.利用默认构造函数2.根据输入矩阵尺寸和类型构造3.利用已有矩阵构造Mat类的赋值1.构造时赋值2.枚举赋值法3.循环赋值4.类方法赋值5.利用数组进行赋值Mat类的构造1.利用默认构造函数默认构造函数使用方式cv::Mat::Mat();通过代码清单2-4,利用默认构造函数构造了一个Mat类,这种构造方式不需要输入任何的参数,在后续给变量赋值的时候会自动判断矩阵的类型与大小,实现灵活的存储,常用于存储读取的图像数据和某个函数运算输出结果。2.根据输入矩阵尺寸和类型构造利

2020-12-13 11:41:21 10456

原创 C++版本OpenCv教程(一)Mat—基本的图像容器

目录目标Mat存储方法显式创建一个Mat对象英文原版链接Mat - The Basic Image Container目标我们有多种方法从现实世界获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等等。在以上任何情况下,我们(人类)看到的都是图像。然而,当将其转换到我们的数字设备时,我们所记录的是图像中每个点的数值。例如,在上面的图像中,你可以看到汽车的镜子只不过是一个包含所有像素点的强度值的矩阵。我们获取和存储像素值的方式可能会根据我们的需要而有所不同,但最终计算机世界中的所有图像都可

2020-12-12 23:48:34 1712

原创 在Ubuntu16.04环境下配置C++版本OpenCv开发环境

在Ubuntu环境中无法安装Visual studio,一般大家都会选择安装vscode,但是vscode配置起来比较麻烦,在这推荐一款比较好用的开发软件Clion,Clion有比windows下Visual Studio 还强大的性能和友好的界面,简直就是Linux下开发C++ 最好的集成开发环境,只要你是学生,只要你有学校邮箱,就可以进行在JetBrains官网申请免费使用特权,这一点超赞!接下来就是详细的安装过程1、下载压缩包首先获取安装包~去官网直接下载: https://www.jetbra

2020-12-12 20:20:51 862

原创 Qt项目界面文件(.ui)及其作用(超详细)

Qt 项目中,后缀为“.ui”的文件是可视化设计的窗体的定义文件,如 widget.ui。双击项目文件目录树中的文件 widget.ui,会打开一个集成在 Qt Creator 中的 Qt Designer 对窗体进行可视化设计,如图 1 所示。本教程后面将称这个集成在 Qt Creator 中的 Qt Designer 为“UI 设计器”,以便与独立运行的 Qt Designer 区别开来。图 1 中的 UI 设计器有以下一些功能区域:组件面板:窗口左侧是界面设计组件面板,分为多个组,如Layo

2020-12-10 23:21:47 2171 1

原创 Qt项目管理文件(.pro)及其作用详解

在 Qt Creator 中新建一个 Widget Application 项目 samp2_1,在选择窗口基类的页面选择 QWidget 作为窗体基类,并选中“Generate form”复选框。创建后的项目文件目录树如图 1 所示。这个项目包含以下一些文件:项目管理文件 samp2_1.pro,存储项目设置的文件。主程序入口文件 main.cpp,实现 main()函数的程序文件。窗体界面文件 widget.ui,一个 XML 格式存储的窗体上的元件及 其布局的文件。widget.h 是所设

2020-12-10 10:28:48 762

原创 编写第一个Qt程序

学习一种编程语言或编程环境,通常会先编写一个“Hello World”程序。我们也用 Qt Creator 编写一个“Hello World”程序,以初步了解 Qt Creator 设计应用程序的基本过程,对使用 Qt Creator 编写 Qt C++ 应用程序建立初步的了解。新建一个项目单击 Qt Creator 的菜单项文件->新建文件或项目,出现如图 1 所示的对话框。在这个对话框里选择需要创建的项目或文件的模板。Qt Creator 可以创建多种项目,在最左侧的列表框中单击“Appl

2020-12-09 23:44:59 222

原创 Qt Creator的初步使用

启动 Qt Creator,出现如图 1 所示的主窗口:Qt Creator 的界面很简洁。上方是主菜单栏,左侧是主工具栏,窗口的中间部分是工作区。根据设计内容不同,工作区会显示不同的内容。图 1 是在左侧主工具栏单击“Welcome(欢迎)”按钮后显示实例的界面。这时工作区的左侧有 “Projects”、“Examples(示例)”、“Tutorials(教程)”、“Get Started Now”几个按钮,单击后会在主工作区显示相应的内容:单击“Projects”按钮后,工作区显示新建项目按钮和

2020-12-09 23:18:34 262

转载 打印CSDN博客内容保存内容为PDF

打印CSDN博客内容或者保存内容为PDF有不少小伙伴都有从CSDN上保存博客为pdf或者直接打印博客的需求,我在网上也搜了几篇文章,这里根据其中的一篇做分享,效果最好。具体操作步骤如下:打印CSDN博文内容,将以下js内容全部复制放入Chrome开发者选项里边的console,回车即可。(function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce,

2020-12-09 08:51:02 237

原创 Ubuntu16.04无法连接wifi的解决方法——针对RTL8821CE网卡

近日,博主给自己的电脑装了双系统(win10+ubuntu16),发现新装的ubuntu16无法连校园网。期间,在网上找了很多的方法,试了很多的方法,发现这个方法非常奏效。如果你的电脑是双系统,另一个系统可以联wifi,或者你在刷ubuntu之前可以连wifi,那么现在无法联网大概率是网卡驱动的问题。只需搞定它就行。首先说明,每一台电脑的网卡都是不同,这个方法针对RTL8821CE网卡+Ubuntu16.04。药医百病,不治百人,这个方法不全适用。(PS:博主之前装成功了ubuntu16,也用其他的方法解

2020-12-02 08:42:05 1235

MATLAB/Simulink中的的S函数的应用

该文档详细介绍了MATLAB的simulink中的S函数的应用,讲解的很详细,可以下载学习。

2019-05-25

STM32F103-CAN通讯程序+代码.docx

该文档详细介绍了STM32的CAN通讯部分的理论内容,并详细讲解了STM32的CAN通讯过程中的接收部分的滤波的内容,这是传统教程中所没有的,里面附带了CAN通讯的代码,下载过后可以直接使用,可以在显示屏上显示发送和接收数据,并显示发送数据计数。

2019-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除