C++(+opencv)
进击的Explorer
学而不思则罔 思而不学则殆
展开
-
c++队列容器适配器queue的用法
queue 是一种容器适配器,并且只能访问该容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。查看队列的定义请看这篇博客,队列的定义和算法的实现一、c++ queue的成员方法在使用queue之前需要加如下所示对应的头文件。#include <queue>成员方法功能用法front()返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。c.front()c原创 2020-09-01 15:26:50 · 334 阅读 · 0 评论 -
c++中栈stack的使用
STL 中的 stack 是一种容器适配器,而不是一种容器。容器适配器是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能。之所以称作适配器类,是因为它可以通过适配容器现有的接口来提供不同的功能。stack容器适配器中的数据是以 LIFO(后进先出) 的方式组织的,通常的操作有入栈(压栈),出栈和栈顶元素。想要读取栈中的某个元素,就是将其之间的所有元素出栈才能完成。查看栈的原理请看这篇博客,栈的定义和算法的实现一、c++ stack的成员方法使用stack需要加如下对应的头文件原创 2020-08-28 15:38:55 · 1090 阅读 · 0 评论 -
c++中unordered_map的用法的详述(包含unordered_map和map的区别)
一、前言如果要在c++ 中使用这map 和unordered_map 两个函数,需要分别引入下面的两个头文件#include<map>#include<unordered_map>unordered_map 容器,直译过来就是"无序 map 容器"的意思。所谓“无序”,指的是 unordered_map 容器不会像 map 容器那样对存储的数据进行排序。换句话说,unordered_map 容器和 map 容器仅有一点不同,即 map 容器中存储的数据是有序的,而 unor原创 2020-08-22 16:14:20 · 33836 阅读 · 2 评论 -
OpenCV(c++)多项式方程求解(PolySolver)
求多项式方程的实根或复根。C++: double solvePoly( InputArray coeffs, OutputArray roots, int maxIters=300 )参数说明:coeffs - 多项式系数数组, coeffs 是从常数项到最高阶。roots - 输出(复数)根数组。是一个二维矩阵,第一维代表实部,第二维代表虚部。maxIters -...原创 2019-11-29 17:22:32 · 2612 阅读 · 0 评论 -
C++类的构造函数后面加一个冒号的含义
最近在看侯捷老师讲解的C++知识,他讲到在构造函数加一个冒号初始化值的方法,会使代码更大气,在此记录一下使用方法构造函数冒号后的初始化class complex{public: complex(double r = 0, double i = 0) : re (r), im (i) // 初始化值 {} ...private: double re, im;};相当...原创 2019-11-29 17:11:18 · 2457 阅读 · 0 评论 -
解决VS 2015运行C++程序时控制台输出窗口一闪而过的问题
最近用VS2015写C++代码,运行代码时,控制台输出窗口总是一闪而过,无法看到自己的输出结果解决办法首先,在你的C++项目处,点右键进入:右键“Project1” -> 属性 -> 连接器 -> 系统 -> 子系统然后 选择 “控制台 (/SUBSYSTEM:CONSOLE)” 最后,点击“确定”或“应用”来保存修改。运行程序发现闪...原创 2019-11-29 12:00:57 · 1422 阅读 · 2 评论 -
OpenCV(C++)的曲线拟合polyfit
曲线拟合表达式:f(x)=a0+a1∗x+a2∗x2+a3∗x3+...+an∗xn=[a0,a1,a2,...,an][1,x1,x12,...,x1n]Tf(x) = a_0 + a_1*x + a_2*x^2 + a_3*x^3 + ... + a_n*x^n = [a_0, a_1, a_2 ,..., a_n][1, x_1, x_1^2,..., x_1^n]^Tf(x)=a0+...原创 2019-11-25 10:46:09 · 7864 阅读 · 0 评论 -
OpenCV (C++)三次样条插值及代码实现
样条插值拟合在MATLAB有现成的函数可以用,在opencv3中并未看到对应或可替代的函数,所以按照三次样条插值原理自己用opencv(C++)语言上写了一个对应的函数,亲测可用,如果有什么问题或是优化方法,请指正。原理部分参考这里三次样条曲线原理 内容文字 内容文字...原创 2019-11-23 15:35:02 · 4651 阅读 · 7 评论 -
vector向量容器中使用insert()插入数值的方法
vector向量容器中使用 insert() 方法可以在vector对象的任意位置前插入一个新的元素insert() 方法要求插入的位置,是 元素迭代器 的位置,而不是元素的下标。#include<vector> #include<iostream> using namespace std; int main() { vecto...原创 2019-11-21 09:56:39 · 6389 阅读 · 0 评论 -
OpenCV(C++)如何删除vector中的元素
让it指向下一个元素erase函数的返回值是指向当前被删除元素的下一个元素的迭代器。我们把这个返回值赋值给it继续遍历。代码如下:for (vector<Point>::iterator it = data.begin(); it != data.end(); ){ if ((*it).y == num) { it = data.erase(it); } else ...原创 2019-11-15 09:09:21 · 1054 阅读 · 0 评论 -
使用OpenCV(C ++)填充图像中的孔
在本教程中,我们将学习如何填充二进制图像中的孔。考虑一下图1左侧的图像。假设我们想找到一个二进制蒙版,它将硬币与背景分离开,如右图所示。在本教程中,包含硬币的圆形区域也称为前景。 请注意,硬币的边界很暗,与白色背景不同。因此,我们使用简单的图像阈值处理将边界与背景分开。换句话说,我们说强度高于特定值(阈值)的像素是背景,其余像素是前景。上示中间图像显示此阈值图像(黑色代表背景,白色代表...原创 2019-11-13 10:07:24 · 1387 阅读 · 2 评论 -
OpenCV颜色空间转换cvtColor()函数用法总结
**cvtColor()**用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致。cvtColor()函数详解C++: void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 )...原创 2019-11-10 10:31:45 · 2326 阅读 · 0 评论 -
OpenCV使用findContours()查找轮廓
C++: void findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())或者(参数hierarchy是可选项)C++: void findContour...原创 2019-11-10 09:55:42 · 652 阅读 · 0 评论 -
OpenCV中对Mat矩阵加、减、乘、除、转置等操作的总结
1、矩阵乘1) 矩阵乘A*B是以数学运算中矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等于B的行数时,才能定义两个矩阵相乘。如A是m×n矩阵,B是n×p矩阵,它们的乘积AB是一个m×p矩阵。例如:Mat A=Mat::ones(2,3,CV_32FC1);Mat B=Mat::ones(3,2,CV_32FC1);...AB=A*B;2) ...原创 2019-11-08 22:50:42 · 35583 阅读 · 2 评论 -
OpenCV的Range类
我们在使用OpenCV库进行图像操作时,常常需要截取ROI区域(兴趣区).在MATLAB中我们一般只需要索引行列坐标即可,如:image(10:20, 20:30)在OpenCV时我们就需要加上Range在索引行列坐标1.Range是OpenCV中新加入的一个类,该类有两个关键的变量start和end;2.Range对象可以用来表示矩阵的多个连续的行或者多个连续的列3.Range表示范...原创 2019-11-07 19:53:24 · 2410 阅读 · 4 评论 -
OpenCV画圆/点函数circle
画一个圆C++: void circle( InputOutputArray img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=LINE_8, int shift=0 )参数说明img - 画圆的图像center - 圆心radius ...原创 2019-11-07 10:23:45 · 2779 阅读 · 0 评论 -
在OpenCV中创建Mat对象
下面的两种方法是我自己比较常用的两种方法采用MATLAB方式初始化矩阵Mat E = Mat::eye(4, 4, CV_64F);Mat O = Mat::ones(2, 2, cv_32F);Mat Z = Mat::zeros(3, 3, CV_8UC1);CV_8UC3使用Mat()构造矩阵Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));...原创 2019-11-07 10:08:40 · 172 阅读 · 0 评论 -
OpenCV 矩阵数据类型转换convertTo
将(可选缩放)数组转换为另一种数据类型。C++: void Mat::convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const参数说明:m - 目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。rtype – 目标矩阵的类型。alpha - 尺度变换因子(可选)。...原创 2019-11-06 10:49:28 · 793 阅读 · 0 评论 -
Opencv的reshape函数
reshape函数既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,而且不需要复制数据。C++: Mat Mat::reshape( int cn, int rows=0) const参数虽然比较少,但是设置时需要小心参数说明:cn - 表示通道数(channels), 如果设为0,则表示保持通道数不变,否则则变为设置的通道数。rows - 表示矩阵行数。 如果设为0,则...原创 2019-11-06 10:01:46 · 1026 阅读 · 0 评论 -
OpenCV中用RNG产生随机数(C++)
产生随机数是编程中经常要用到的操作。C和C++中产生随机数的方法如rand()、 srand() 等在OpenCV中仍可以用。此外,OpenCV还特地编写了C++的随机数类RNG,C的随机数类CvRNG,还有一些相关的函数,使用起来更加方便。说明1、关键字前带cv的都是C里的写法,不带cv的是C++里的写法,比如CvRNG和RNG,其本质都是一样的。2、计算机产生的随机数都是伪随机数,是根...原创 2019-11-05 20:05:24 · 1686 阅读 · 0 评论 -
OpenCV中Mat类rowRange和colRange的用法
rowRange为指定的行空间创建矩阵标头。C++: Mat Mat::rowRange(int startrow, int endrow) 参数说明:startrow - 行空间包含基于0的起始索引。endrow - 一个基于0的行空间结束索引。colRange为指定的列范围创建矩阵标头。参数说明:...原创 2019-10-29 15:39:03 · 7816 阅读 · 0 评论 -
OpenCV中使用kmeans算法的方法
首先我们通过OpenCV中的随机数产生RNG,生成一些均匀分布的随机点,这些点的位置对应一副图像中的像素位置,然后使用kmeans算法对这些随机点进行分类,并计算出类簇的中心点。随机产生的簇的数量是2到5之间的值,采样点的数量范围是1~1000,一维矩阵centers存放kmeans算法结束后,各个簇的中心位置。...原创 2019-10-28 12:28:25 · 1124 阅读 · 0 评论 -
OpenCV中自己写的一个find函数
在MATLAB中我们经常会使用find函数来查找对应像素所在所有的行向量和列向量(对应的坐标值),在MATLAB中的书写格式为:[rows, cols] = find(X == n); % 即为你想查找的像素值在OpenCV中我并没有找到相对应的函数,如果有谁知道什么函数函数能够实现相对应的功能,麻烦告知我一下,下面的这个函数是我自己写的一个代码段,如果有什么问题,接受批评和指教。...原创 2019-10-25 10:22:07 · 1218 阅读 · 1 评论 -
OpenCV计算矩阵元素的和
有时我们需要计算矩阵中所有元素的和,在MATLAB中我们经常会使用下列的格式来计算矩阵的和:sum(sum(A)); %matlab中的或者sum(A(:)); %matlab中的在OpenCV中,用sum求和的格式有所不同:C++: Scalar sum(InputArray src)参数说明:arr - 输入矩阵必须有1到4个通道。如果,你输入的是单通道的图像...原创 2019-10-25 10:04:28 · 5459 阅读 · 0 评论 -
OpenCV轮廓提取findCotours函数和drawContours函数
总结一下轮廓提取函数:C++: void findContours // 提取轮廓,用于提取图像的轮廓( InputOutputArray image, // 输入图像,必须是8位单通道图像,并且应该转化成二值图像 OutputArrayOfArrays contours, // 检测到的轮廓,每个轮廓被表示成一个Point向量 OutputArray hier...原创 2019-10-24 11:31:32 · 803 阅读 · 0 评论 -
OpenCV中用一副图像充当另一副图像的位置索引(如MATLAB的A(B == 1))
在MATLAB中用B里的元素位置,在该位置下相应位置对A图像的像素引用或修改都很便捷,句式也很简单:A(B == 1) = 0;但是在c++的opencv中对矩阵的用法却是不同的。具体写法如下:A.setTo(0, B);对于mask的其中一种求法,可看我对compare()函数的简介...原创 2019-10-22 19:24:42 · 440 阅读 · 0 评论 -
OpenCV图像分割与分水岭算法(C++)
我们将一个如何使用距离变换和分水岭分割相互接触的物体的例子。考虑一下下面的硬币图像,这些硬币相互接触。即使你去阈值化它,它也会互相碰触。 我们从找到硬币的大概估计值开始。为此,我们可以利用大津的二值化。#include<iostream>#include<opencv2\opencv.hpp>using namespace std;using nam...原创 2019-10-22 18:54:53 · 3143 阅读 · 1 评论 -
OpenCV的形态学开操作和闭操作(morphologyEx)
结构元素返回用于形态操作的指定大小和形状的结构元素。函数形式:C++: Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))参数说明: shape - 元素形状可以是下列之一: MORPH_RECT - 一个矩形结构元素 MORPH_ELLIPSE - 一种...原创 2019-10-21 15:47:39 · 839 阅读 · 0 评论 -
OpenCV画直线函数line
画一条连接两个点的线段。line的函数格式:C++: void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=LINE_8, int shift=0 )参数:img - 输入输出图像 pt1 - 线段的第一个点 ...原创 2019-10-21 10:56:55 · 1696 阅读 · 1 评论 -
c++的auto类型说明符和decltype类型指示符
auto类型说明符编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。c++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型,且,auto定义的变量必须有初始值。// 由val1和val2相加的结果可以推断出item的类型auto item =...原创 2019-10-20 11:28:57 · 216 阅读 · 0 评论 -
OpenCV查找全局矩阵(Mat)的最大最小值
查找数组中的全局最小值和最大值。c++书写格式为:C++: void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, InputArray mask=noArray())参数说明: src - 输入单通道阵列。 minVal - 指向返回...原创 2019-10-20 09:38:51 · 4384 阅读 · 0 评论 -
cv::compare()的使用
一直习惯MATLAB的双等号(==)进行两个图像矩阵是否相等,在opencv发现不能用双等号(==)直接进行逻辑等于操作。后来发现,opencv将其中的各种逻辑操作封装在了compare的操作里。定义执行两个数组或数组和标量值的每个元素的比较。函数定义C++: void compare(InputArray src1, InputArray src2, OutputArray dst, ...原创 2019-10-18 22:19:24 · 910 阅读 · 0 评论 -
OpenCV的逻辑运算
1、逻辑与计算两个数组或数组与标量的逐元素逐位的与。C++: void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray())注:src2可为标量2、逻辑非C++: void bitwise_not(InputArray src, OutputArray dst,...原创 2019-10-18 21:03:46 · 649 阅读 · 0 评论 -
OpenCV像素数据类型
1、Unsigned 8bits注:一般图像结构参数Mat数据结构参数:CV_8UC1,CV_8UC2,CV_8UC3, CV_8UC4变量类型空间大小范围原创 2019-10-18 20:35:10 · 1651 阅读 · 0 评论 -
OpenCV的创建图像时的图像类型
OpenCV创建图像时,常用图像类型:形式:CV_<bit_depth>(S|U|F)C<number_of_channels>bit_depth: 比特数-代表8位,16位,32位,64位…S|U|F: S - 代表 - signed int - 有符号整型 U - 代表 - unsigned int - 无符号整型 F - 代表 - ...原创 2019-10-18 17:11:08 · 549 阅读 · 0 评论 -
MATLAB的bwlabel函数在opencv对应的实现
MATLAB的bwlabel函数在opencv对应的函数为connectedComponentsint connectedComponents(InputArray image, OutputArray labels, int connectivity=8, int ltype=CV_32S)原创 2019-10-18 15:15:00 · 1008 阅读 · 0 评论 -
C++中头文件(.h)和源文件(.hpp)应该写什么(二)
在C++编程过程中,随着项目的越做越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。 简单的讲,一个Package就是由同名的.h和.cpp文件组成,当然可以少其中任意一个文件:只有.h文件的Package可以是接口或模板(template)的定义;只有.cpp文件的Package可以是一个程...原创 2019-09-30 22:08:18 · 1458 阅读 · 0 评论 -
C++ 类(基本概念+类成员函数+类访问修饰符+构造函数 & 析构函数) (一)
C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。C++类定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括...转载 2019-10-03 11:13:31 · 272 阅读 · 0 评论 -
C++ 类(拷贝构造函数)(二)
C++ 拷贝构造函数拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数...转载 2019-10-03 15:22:42 · 119 阅读 · 0 评论 -
C++ 枚举类型enum
枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。定义格式:枚举类型的定义格式为:enum <类型名> {<枚举常量表>};格式说明:关键字enum——指明其后的标识符是一个枚举类型的名字。枚举常量表——由枚举常量构成。“枚举常量"或称"枚举成员”,是以标识符形式表示的整型量,表示枚举类...转载 2019-10-03 16:26:50 · 7324 阅读 · 0 评论