随笔分类 - CPP&OpenCV
摘要:想必很多人都看过“头文件中的 #ifndef/ #define/ #endif防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件都要加入#ifndef / #def
阅读全文
摘要:SIFT/SURF为了实现不同图像中相同场景的匹配,主要包括三个步骤: 1. 尺度空间的建立; 2.特征点的提取; 3.利用特征点周围邻域的信息生成特征描述子; 4.特征点匹配。 SIFT 1.生成高斯差分金字塔(DOG),尺度空间构建 (1)通过对原始图像进行尺度变换,获得图像多尺度下的尺度空间表
阅读全文
摘要:图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。 图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的,分辨率逐步降低且来源于同一张原始图的图像集合。其通过梯度向下采样获得,直到达到某个终止条件才停止采样。 金字
阅读全文
摘要:在许多实际应用中,我们需要分割图像,但无法从背景图像中获得有用信息。分水岭算法在这方面往往是非常有效的。此算法可以将图像中的边缘转化成“山脉”,将均匀区域转化为“山谷”,这样有助于分割目标。 分水岭算法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一
阅读全文
摘要:Mat preImg = imread("9.jpg") Mat dst = Mat(preImg.size, CV_8UC3, Scalar(255, 255, 255)); //uchar*给Mat转换数据的时候,需要先定义图片的大小 uchar* s = preImg.data; //Mat转
阅读全文
摘要:[00/13/2020-21:46:09] [E] [TRT] (Unnamed Layer* 0) [Convolution]: at least 4 dimensions are required for input While parsing node number 1 [BatchNorma
阅读全文
摘要:ERROR from mpegvparse0:No valid frames found before end of stream Error from decodebin0: GStreamer encountered a general stream error 上述两个错误是在视频解码时出现错
阅读全文
摘要:请写出sizeof的运算结果 程序1 class Base{ void f(){} }; class Derived1:public Base{ void f1(){} }; class Derived2:public virtual Base{ void f2(){} }; sizeof(Base
阅读全文
摘要:在C++出现的时候为了兼容C语言,保留了结构体的概念,但是对结构体做了扩展。C++中的结构体不仅可以包含数据成员,还可以包含方法成员,因此从构成的角度来讲,类和结构体没有区别。 访问权限,在定义时如果没有显式地使用访问限定符,类中默认是private成员,而结构体中默认是public成员。 类和结构
阅读全文
摘要:面向对象的基本特征:抽象、封装、继承、多态 抽象 抽象就是找出对象的共性,然后将这些对象抽象成类。因此类是对象的抽象,对象是类的具体表现形式。同一个类的不同对象具有某些相同的属性和行为,也就是共性,而特性应该从类中排除。 封装 封装是指类可以把自己的属性和方法隐藏起来,对外只暴露有限的信息。具体来讲
阅读全文
摘要:1 解析不同变量之间的区别: 数组名a: 数组名a可以作为数组第一个元素的指针。我们由数组和指针的关系知道,a代表这个地址数值,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i = &a[i
阅读全文
摘要:#include "iostream" #include "algorithm" #include "opencv2/opencv.hpp" using namespace cv; using namespace std; int main() { string imgPath = "D:\qtpr
阅读全文
摘要:h264有两种封装,一种是annexb模式,传统模式,有startcode(0x000001或0x0000001)分割NALU,在mpegts流媒体中使用,vlc里打开编码器信息中显示h264; 一种是AVCC模式,一般用mp4、mkv、flv容器封装,以长度信息分割NALU, vlc里打开编码器信
阅读全文
摘要:今天用opencv保存的视频文件超级大,被小伙伴们嘲笑,哈哈,原来是视频帧编码格式导致的,这里记录下常用的保存视频编码格式。 编码参数:cv2.VideoWriter_fourcc('I','4','2','0') 未压缩的YUV颜色编码,4:2:0色度子采样。兼容性好,但文件较大,注意是很大。文件
阅读全文
摘要:zmq的基本功能: (1)将消息快速高效地发送给其他节点,这里的节点可以是线程、进程、或是其他计算机; (2)zmq为应用程序提供了一套简单的套结字API,不用考虑实际使用的协议类型(进程内、进程间、TPC、或广播); (3)当节点调动时,zmq会自动进行链接或者重连; (4)无论是发送消息还是接收
阅读全文
摘要:1、cv::getTickCount()与cv::getTickFrequency()搭配使用,计时单位是秒。 使用方法: double ts = (double)cv::getTickCount(); ... double te = (double)cv::getTickCount(); doub
阅读全文
摘要:做过相关工程很久了,没有记录,发现有些忘记了,又复习了一遍,这里记录下: 我这里的代码做过删减,直接运行不了,重点在于说明thread创建框架、锁的使用、条件等待以及双缓冲的使用! #include <stdio.h> #include <iostream> //thread #include "t
阅读全文
摘要:List封装了链表,Vector封装了数组,List和Vector最主要的区别在于Vector使用连续内存存储,它支持[ ]运算符([ ]下标运算符,可以获取数组中单独的元素),而List是以链表的形式实现的,不支持[ ]。 Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素的速度
阅读全文
摘要:这两个函数经常用到,总是记不住,记下来,方便翻阅 c_str()和data():生成一个const char*指针,指向一个临时数组。 c_str()函数返回一个指向正规C字符串的指针,内容与string串相同。 C++中c_str()主要用法就是为了与C语言兼容,在C语言中没有string类型,故
阅读全文
摘要:如何遍历一副图像?简单的方法就是写一个双层循环,增量分别为行和列,如下所示: Mat img = Mat(rows, cols, CV_8UC3,Scalar(0)); for(int i = 0;i < rows; i++) { for(int j = 0; j < cols; j++) { im
阅读全文