- 博客(23)
- 收藏
- 关注
原创 基于C++的OpenCV从网络相机获取视频流
首先,应配置好计算机的IP网段,必须位于相机所在网段。例如相机IP为“192.168.1.64”,则可以设置计算机的IP网段在“192.168.1.5”,子网掩码为“255.255.255.0”,默认网关为“192.168.1.1”。之后,配置OpenCV的包含目录、库目录和依赖项,之后使用以下代码获取视频流。其原理与USB相机类似,都是用VideoCapture类,区别是打开时需要打开对应的IP地址,并在命令中加入用户名和密码。(此段代码来自简书opencv RTSP拉流 - 简书)#inclu
2021-10-22 10:14:24 5386
原创 Latex跨文件引用
转自知乎问题。比如论文分为多个".tex"文件来写时,需要从第四章引用第三章的公式,就需要在第四章开头进行包含文件处理。方法如下:使用xr宏包\usepackage{xr}\externaldocument{texfile}texfile就是你要引用标签的tex文件名,需要编译好,\externaldocument会寻找texfile.aux...
2021-03-08 23:08:40 6728
原创 Latex论文复杂组合图片设计
最近在使用Latex写博士论文,中间遇到了一些想设计一幅图片中多个子图位置的问题。如果想画普通的横排多图或者竖排多图,可以使用\begin{figure}\centering\subfigure[]{\includegraphics[width = 0.45\textwidth]{xxx.png}}\subfigure[]{\includegraphics[width = 0.45\textwidth]{xxx.png}}\end{figure}的写法,横排多图时保证多个子图的widt
2020-11-30 15:36:58 2073
原创 用论文写作平台Overleaf写中文论文
向大家推荐一下一个非常好用的论文写作平台,Overleaf。能看到这篇文章,说明你也在考虑写论文或者正在写论文,那么你肯定也听说过Latex编辑器。我在最早时候写硕士论文都是用Microsoft的Word文档写,内容编辑好之后需要调整格式,分栏、页边距、字体这些,而Word版本又很多,早的有Word2003,后面又是Word2007什么的,.doc和.docx什么的,搞的很乱,非常烦。上网查如何调整格式就花了很多时间精力。后来读博之后,第一篇SCI是用期刊官网给的Latex模板写的。模板需要放进
2020-11-25 10:34:22 6822 1
原创 C++ bool和int类型的vector容器以及C风格数组访问速度比较
在做一道LeetCode练习题(416.分割等和子集)时,我发现我模仿官方答案写的程序运行速度比官方答案耗时多几倍,于是就开始了一行一行的比对,最后发现原来是vector<int>和vector<bool>的区别。对于只需要区分true或false的情况,使用bool变量是非常清晰的,而使用int变量则显得不太容易阅读(除非加注释)。而且,毕竟bool变量号称只占1个字节,而int要占8字节(64位系统)。直观上肯定觉得bool型用起来会更快。但是,我vector<in
2020-10-11 16:16:27 1645 3
原创 C++中vector容器与C风格数组的访问效率对比
在LeetCode算法题中,我发现了不同类型的vector容器访问速度有显著差异,于是进一步想探索vector容器与传统C风格数组之间的的访问速度差异。我编写了一个简单的测试用例,在VS2017环境下测试,代码如下:#include <iostream>#include <vector>#include <ctime>using namespace std;int main(){ vector<int> a(100000, 0);
2020-10-11 15:37:53 1470 1
原创 C风格数组和C++vector容器的越界问题
首先,可以思考一个问题:如果有一个容量为5的数组,我们却调用它的第六个元素,会产生什么结果呢?我在微信群里跟几个同学讨论,然后看到了很多不同的声音。首先,需要明确使用的编程语言,因为不同的编译器确实可以造成不同的结果。就我熟悉的C语言和C++来说,就有着一定的差异。对于C语言,数组变量保存在一个专门开辟出来的栈当中,因此,如果是小范围的越界调用,并不会造成灾难性的后果,比如以下程序。#include <iostream>#include <vector>us
2020-10-05 19:00:59 1771 2
原创 逻辑与&&和或||的执行顺序
今天刷LeetCode的每日一题,四数之和(18题)。因为没思路,就先看了一遍官方答案的思路,然后默写了一下。但执行时候就崩溃了。仔细一个个语句对照之后,发现了问题在数组访问越界。数组越界,简而言之,就是:假设一个一维数组有三个元素,我却访问了第四个元素,程序就会就崩溃。在这道题的程序中,体现为以下程序不会崩溃,while(left < right && nums[left] == nums[left+1] )//一个典型的双指针算法left++;但下面程序
2020-10-05 18:43:19 2600
原创 Visual Studio 2017怎样调试main函数含参数的程序(C++、OpenCV)
首先使用:cd F:SoftwareData\OpenCV\Study\Calibration_sample...(根据你自己的盘符和目录设置)这样的方式将CMD运行环境转移到需要运行的exe程序所在的目录。注意,cd是转移目录的命令,即:change directory。 在运行含有参数的exe程序时,需要在CMD环境下直接输入可执行程序名称(不含扩展名“.exe”),然后不按回...
2020-04-08 11:09:25 1881
原创 多帧图片求平均值消除噪声
有些时候,相机会因为ISO过高等原因,产生严重的噪声。比如下图,是用一个劣质相机拍摄的,噪声很严重。之前在一篇论文中看到,如果是拍摄静止的图像,且相机的位置可以固定,则可以尝试拍摄多帧图像并求平均来消除这种随机噪声。于是,我就尝试了一下,效果还是很好的。下图就是上图同样角度拍摄的连续20帧图像的平均图像。如果这样观看对比不明显,可以观看下面我用PS将两幅图拼合在一起的样子。拼合...
2019-03-25 19:47:33 7086 8
原创 使用OpenCV打开指定的摄像头
因为台式机不自带摄像头,用OpenCV在台式机上运行以下程序可以直接打开外接的摄像头。#include <opencv2\opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ VideoCapture capture; capture.open...
2019-03-07 09:49:25 4704
原创 C++的public继承中的public、private和protected
C++语言是对C语言的一种增强,而其主要贡献在于,为C语言增加了类和模板等功能,可以帮助实现面向对象编程和代码复用等更方便的功能。 C++语言的类,一般都包含两种成员,分别是成员变量和成员函数。成员变量可以用来表示该类的某些状态,而成员函数则可以用来对这些成员变量进行操作。而对于这些成员而言,最核心的概念当属类的封装和继承的概念。1. 封装 所谓封装,就是编写一个类...
2018-09-21 17:05:38 1102
原创 C++中的重载(overloading)和重新定义(redefine)的相似之处、区别及其混合使用效果
C++语言的一种设计思想就是,使一些功能可以重复使用,从而使操作更加便捷。 而重载(overloading)和重新定义(redefine)都是帮助C++实现这样的效果的功能。1. 重载(overloading) 无论是函数的重载或者是操作符的重载,都可以极大简化后续代码的编写。以下举两个简单例子。(1)函数重载//函数重载,重载打印数字和字符串功能voi...
2018-09-19 16:18:57 750
原创 C++语言中的左值与右值,以及右值引用“&&”
在学习C++ primer Plus的第八章“函数探幽”的过程中,我终于见到了以前一直不懂的“int && a”字样的语法结构。现在知道了,这个叫做“右值引用”,其特点就在于可以引用右值。那么究竟怎样理解“左值”和“右值”,以及“右值引用”呢? 首先,通过一个直观的例子了解什么是左值和什么是右值。int a;a = 1; ...
2018-08-13 20:06:13 1718 2
原创 C++中的const与指针的四种排列组合的属性
以指向int类型变量的指针为例 指向非const类型变量 指向const类型变量 可否变更指针指向的位置 非const类型指针 int * p const int * p 可改变指向位置 const类型指针 int * const p const int * const p 不可改变指向位置 可指向的内容 只可指向非const...
2018-07-25 19:44:50 254
原创 C++编程中带有“update”字眼的文件名不能随便起——记录一次错误命名带来的麻烦
大家都知道,一般而言,在windows系统中,为新创建的文件命名时,在保证后缀合法的基础上,还要保证文件名本身也合法,比如不能含有某些符号和空格等。但在某些情况下,即使已经将文件命名为合法的名称,仍然存在出现问题的可能,比如下面就会谈到我今天所遇到的情况。 事情的背景故事是这样的。我,一个C++初学者,在“CodeBlocks”软件下,参考《C++ Primer Plus》进行一...
2018-07-18 20:09:48 936
原创 指针操作分析——"p++"、"*p++"、"*p=*p+1"、"(*p)++"
之前在OpenCV3教程中发现指针运算有时候会用括号把指针变量括起来,有时候则不括起来。所以进行了如下分析来观看各种操作的效果。测试的代码如下:#include <iostream>using namespace std;int main(){ int *p;///声明一个指针变量 int n[20];///创建一个简单的数组用于观察指针 fo...
2018-07-02 13:36:25 15837 2
原创 从相机标定数据(.yml文件)读取相机参数并对单目相机的畸变图像进行校正
单目相机,尤其是一些具有较大视场角的鱼眼相机,所拍摄的图片通常具有较大的桶形畸变。 为了获得正确的图像,即“真实世界的直线在图片中也呈现为直线”,需要对相机拍摄的图片进行校正。 校正需要相机的内参,而通过标定相机可以获得这些参数(标定的方法见我之前的博客)。一般情况下,标定之后都需要把获得的相机标定数据保存在一些文件中,通常使用“.yml”文件格式。保存在这种格式文件中的数据非...
2018-06-14 16:17:15 4073
原创 读OpenCV自带的标定例程“calibration.cpp”感想
为了更好地了解OpenCV的相机标定功能和使用已经标定的数据进行相机的畸变校正,我把OpenCV的例程“calibration.cpp”从头到尾重新读了一遍,并进行了一些基本的注释,来增加这个代码的可读性。 OpenCV自带了很多例程,但由于是注释是英文编写,且注释很少,导致初学者学习很不容易。 为了使用“标定”这个功能,我查阅了很多CSDN博客和百度等,终于按照一些前辈的方法...
2018-06-13 23:31:13 3986 2
原创 基于OpenCV自带例程的相机标定
OpenCV库自带了一个可以用于相机标定的功能,不仅可以标定最常见的棋盘格标定板,还可以用于Halcon常用的圆点阵列标定板。 以下对如何使用该自带例程进行相机标定进行一个简要的介绍,也算是对之前工作的一个总结。 1.获取标定图片 ...
2018-06-09 22:04:44 3664
原创 在Visual Studio中进行OpenCV的C++编程的准备工作
1.包含头文件 在Visual Studio中进行OpenCV的C++编程,首先需要进行“包含说明”,即"#include<xxx>",将一些OpenCV所定义的函数包含进去。这样,在进行编译时,编译器就可以将我们需要的函数编译成需要的功能,而非把它们当做是一堆乱...
2018-06-09 20:55:17 1246
原创 Visual Studio 2017 以及 OpenCV3.4.1 的安装与初步使用
1.使用Visual Studio和OpenCV的初衷 虽然Halcon软件可以很简单地处理图像,但由于其商用软件的性质,我们使用的都是和谐版。最近进入6月还被迫更新了一下他的license,需要进入“51Halcon”网站注册并下载。美国特朗普禁止了很多芯片,将来真不知道这个软件会不会被禁止破解使...
2018-06-09 18:19:24 1879
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人