C++
文章平均质量分 68
_寒潭雁影
中科大IT向博士,熟悉MFC,C++,C等语言,参与过ffmpeg、机器视觉、并行计算、数据库等相关项目的研发和代码的编写http://blog.csdn.net/weixinhum为本人博客,上面记录了本人的一些技术总结
展开
-
使用vcpkg包管理工具配置C++工程环境
做开发转眼间有十多年了,期间主要以C++为主,因为其蛋疼的没有自带的包管理工具,因此每次搞个工程都需要花大量的时间在环境的配置上。这些配置的操作无非就是去官网下载库,然后包含添加到工程里面,非常机械化,然而又不可避免。虽然配置到全局也是一种办法,然而又增加了工程间互相干扰的风险。最近又要开启一个新工程,遂研究一下已经标注了很久的vcpkg包管理工具,看看能不能用它来简化下这要命的机械化操作。这篇文章将主要介绍vcpkg包管理工具的安装和利用其为工程配置目标库的操作。原创 2024-03-27 17:35:37 · 690 阅读 · 0 评论 -
C++结构体的内存分配细节
在使用C++处理固定长度和结构的数据传输时,直接把接收的数据视为字符数组并按协议约定的数据格式拼接,会涉及大量编程。因此,博主在做项目的时候倾向于在结构体中按协议定义数据类型,然后将接收的数据直接拷贝到结构体的内存中,以实现高效的数据解析。这样既减少了代码量,也提高了处理效率。在执行这种操作时,需要精确掌握结构体中内存分配的细节。原创 2023-12-25 21:53:54 · 530 阅读 · 0 评论 -
C++使用sqlite3数据库
下载SQLite官网地址:https://www.sqlite.org/download.html生成sqlite3.lib将第二个文件,也就是sqlite-dll-win64-3350400文件解压到出来,得到sqlite3.dllsqlite3.def在之前已经安装好的Microsoft Visual Studio 2019安装目录下找到link.exe链接执行文件及相应的动态库。本人目录(因为版本不同和安装路径不同,每人基本都不一样,最好自己点一点)是:C:\Program原创 2021-04-15 23:15:55 · 2762 阅读 · 0 评论 -
使用C++调用控制台启动其他程序
在一些场景下,有界面的程序需要去调用控制台执行某些命令,这个时间可以利用ShellExecuteEx这个API来操作。具体如下:SHELLEXECUTEINFO commend;//命令对象memset(&commend, 0, sizeof(SHELLEXECUTEINFO));commend.cbSize = sizeof(SHELLEXECUTEINFO);commend.f...原创 2020-02-03 17:36:25 · 2664 阅读 · 0 评论 -
C++ 文件复制
void copyFile(CString file1,CString file2){ CFile hFile; int len; hFile.Open(file1, CFile::modeRead | CFile::typeBinary, 0); len = hFile.GetLength(); //分配缓冲区 char* buf; buf = new char[len + 1]...原创 2020-01-30 20:28:36 · 1396 阅读 · 0 评论 -
C++11并发编程实作
C++11之后加入了并行编程的接口,使用起来非常简单:#include <iostream> #include <thread>void p(){ while (true) { std::cout << "asd" << std::endl; }}void main(){ std::thread p(p); ...原创 2020-01-17 18:03:25 · 437 阅读 · 0 评论 -
C++计时功能实现
计时是程序中非常常见的需求,可以通过其判断程序运行的实时性。最常见的计时功能实现如下:#include <iostream>#include <ctime>int main(){ clock_t start = clock(); //耗时计算 for (size_t i = 0; i < 100000; i++) { cos(1); sin...原创 2019-12-23 10:23:51 · 2482 阅读 · 0 评论 -
C++ 多线程编程相关
C++本身已经提供了多线程接口,这位老哥的文章写得异常的清晰,请直接移步。下面的东西年代比较久远,是调用Windows的API实现的,虽然也没有错,但还是不如直接用C++的API好,当然如果只需要考虑Windows的程序,也可以略为参考。---------------------------------不知道大家在 MFC 编程时有没有遇到过这样一个问题,当一个程序用到比较复杂的计算或...原创 2014-05-04 02:09:38 · 1251 阅读 · 0 评论 -
MFC RS232串口通信
PC程序跟RS232串口进行通信算是比较老的题目了,不过老归老,只要用这个接口的硬件还在,就难免要去折腾它。而这个时候就会发现老的坏处在于资料都是半截入土,拍一拍烟尘四起,抖一抖蛛丝乱飞的玩意。 现在做这个的基本都是用的SerialPort这个类,而这个类的最新更新已经有一段岁月,所以本人在下载了这个东西之后,费了些功夫才将其修改到能运行在VS2015版本的PC程序上,在此把修改完的版本原创 2015-09-04 22:38:49 · 13333 阅读 · 6 评论 -
C/C++ 图像处理(7)------图像の球面贴合算法
关于图像的球面投影,是全景应用中比较常见的技术,而现有的一些资源大多写的不太好,比较晦涩。在经过一段时间的摸索之后,发现了这个博客写的相对可以,本文的实现也将其作为重要的参考,如果看过本文之后有什么不明白或者觉得不好的地方可以去看看。 在展看本文之前,先来看看下面的两张图片:原创 2016-01-10 18:33:06 · 6889 阅读 · 7 评论 -
C++ 类型转换归纳
本篇根据编程遇到的类型转换慢慢往上加东西。 CString 转 intCString str("123");//如果其中填的不全是数字,则返回从左到右碰到第一个非数字字符前的数字字符数值,如果最左边不是数字字符,返回0int i= _ttoi(str); CString 转 char*(UNICODE字符集环境)#include &...原创 2014-05-12 23:19:18 · 1141 阅读 · 0 评论 -
C/C++ 图像处理(16)------图像轮廓の最小外接矩形
有时做图像处理,会遇到图像中大部分信息是冗余的情况,以下图为例: 假设图中黑色部分才是我们需要研究的对象,则外围的一堆白色是我们希望去掉的,这个时候用最小外接矩形来框住黑色部分,进而截取该部分的信息而忽略掉其他的信息变得实用。 下面,就给出查找图像轮廓中最小外接矩形的代码,后面有空再给出在图像中截取外接矩形的部分成为新图像的代码。#include "opencv2/highgui/highg原创 2017-01-24 17:44:11 · 8460 阅读 · 0 评论 -
C/C++ 图像处理(9)------图像の桶形畸变矫正
广角镜头的摄像设备拍摄出来的图像经常会有桶形畸变的问题。原因在于广角镜头使用的是凸透镜,初中物理知识告诉我们凸透镜会对光线起汇聚作用,这是光的折射造成的。而离镜头中心越远,折射效果越强,因而其拍出来的照片会以镜头中心为圆心,呈圆形向外扩展失真,如下图所示: 像上面这样的图像,如果用在一些还原性要求较高的场景是不行的,需要对图像做畸变矫正。而由于很多时候我们并不知道摄像头的物理...原创 2016-03-19 17:31:19 · 23183 阅读 · 21 评论 -
MFC 用 Direct2D 显示图像到 Picture Control 中
2016年第一天,新年快乐!!! 由于一直跟视频这块打交道,对于图像编解码和显示等方面都有所研究。最近遇到一个性能要求比较高的应用,原本的GDI绘图导致到线程负荷比较重,造成整个系统不稳定,因而生了要用Direct2D来取代的念头。经过一番研究后发现,Direct2D原来是这么的简单方便,而效率也比GDI有了显著的提升。废话不多说,下面还是直接上代码吧。 本人一开始是在网上搜的原创 2016-01-01 02:29:16 · 5067 阅读 · 3 评论 -
C/C++ 图像处理(13)------双目图像の深度图生成
双目图像可用于生成具有深度的三维图像,其是通过模仿动物双眼的工作机制而来。关于其相关的算法,现如今研究的人很多,但仍离动物双眼的视觉效果千里之遥,只能用在非常有限的范围之内。 近来由于项目所需,要用到双目图像生成深度图,因此做了些研究,然并未深入理解其原理,因而也不在此处做更多的讨论。 本篇文章记录下用网上给出的标志双目图像,且利用OpenCV提供的相关函数计算出双目图像的深度图的实现过程。原创 2016-10-21 16:57:58 · 13617 阅读 · 6 评论 -
C/C++ 图像处理(11)------图像の仿射变换
图像的仿射变换,用以改变观看图像的视角,在图像处理中经常被用到,本篇文章用以记录相关的一些算法研究和内容。由于作者近期比较忙,暂时只是记录了用OpenCV如何实现该算法,后续会加上相关的内容。#include #include using namespace cv;int main(){ //读入待处理图像 Mat image = imread("矫正后图像.jp原创 2016-07-23 17:04:50 · 5346 阅读 · 0 评论 -
C/C++ 图像处理(10)------相近图像の匹配
近期做项目调研的时候刚刚好需要用到图像匹配相关的算法,因此在这里做下记录。 相近图像的匹配,其实归根结底只有一个目的,就是找到两张图像中反映相同现实位置的几个像素点,然后获得到这些像素点的坐标,以供后面仿射变换等算法进行处理。 其基本思路如下: 1. 检测两张图像的特征点 2. 匹配检测到的特征点 3. 对匹配到的特征点对进行排序 4. 得到匹配度高的前n对特征点 5. 在原创 2016-07-13 00:43:24 · 6152 阅读 · 2 评论 -
DirectX 在MFC框架下的应用
一般而言,用到DirectX进行编程时,会直接在win32项目下自己创建窗口,然后在该窗口上进行操作。然而,如果已经用MFC写了一部分代码,然后突然发现用DirectX来处理3D的显示部分会比较给力,这时就需要将两者结合起来了。 由于之前作为新手时研究过一段时间的DirectX,在心里留下了一大片阴影,因此直到最近被逼无奈才又开始搞这个。结果发现,对于其跟MFC框架的结合并没有想象中的那么困难,原创 2016-05-23 18:51:08 · 4849 阅读 · 1 评论 -
OpenMP基础使用
OpenMP是CPU并行加速相关的编译处理方案,VS很早的版本就对其提供了支持,不过默认是关闭的。要开启这一支持,只需要在项目的属性中设置就可以,具体选项为:配置属性->C/C++->语言 在右侧列表中有一项“OpenMP 支持”,下拉选择“是(/openmp)”就可以了。 其实本人是在前几天才知道有这个东西存在的,朋友跟我说这个东西用起来相比正常的开启多线程要方便很多,经过研究发现其原创 2015-03-19 21:29:33 · 2158 阅读 · 0 评论 -
C++ PDF文档相关操作
关于在Windows平台下用C++实现PDF文档制作的相关操作,有不少库可以帮助我们实现。本人因为一开始先接触到PDFlib,所以就用这个库做了个小工程,本篇文章为该工程用到的相关操作总结。 PDFlib并非是开源库,要使用需要付费,否则会有一个让人不要不要的水印在页面的后头。当然,我大天朝从来不理会这些,有压迫的地方就总有雷锋站出来搞个破解版,该库也不例外,可以到这位雷锋的博客地点去下原创 2015-08-26 16:56:26 · 14657 阅读 · 6 评论 -
OpenCV 用dnn深度学习模块检测图像
最近在做人物目标检测相关的项目,发现OpenCV从3.1(或者更找)提供了dnn深度学习模块(需要自行编译进去,具体的可见这篇文章),因此下下来试试看。难度全在编译那边了,编译完成后反倒很简单,下面就简单的看一下: 新建一个空白的Win32项目 找到“opencv_contrib-master\modules\dnn\samples”文件夹(如果不知道这是什么,请去看看之前编译的那篇文章)的四个原创 2017-04-29 18:17:25 · 17377 阅读 · 6 评论 -
Pytorch1.0的(C++ & cpu)版本在Windows上的使用
之前一直用Pytorch做的网络训练,最近想看看训练出来的模型在C++上的表现(毕竟稍微注重效率的工程都用的C++写),因此花了点时间研究了一波。因为PyTorch的Python版本和C++版本使用的文件描述有区别,因此需要先把Python版本训练的模型转换成Torch Script形式(相信这一点不太方便的地方后面会被FB大佬们改掉的)。转换的代码如下:import torchimpor...原创 2019-03-15 18:28:35 · 2420 阅读 · 0 评论 -
VS2017 WinPcap的配置及简单的使用demo
一般涉及到网络编程,我们会用上层的socket相关API进行,但有些时候我们需要从底层进行抓包,在Windows上,我们可以用WinPcap来做这件事。官网地址:https://www.winpcap.org/install/default.htm首先在上面圈中的两个地方分别下载安装包和开发包。然后先安装(注意这个是必须先做的,不然哪怕运行代码也会失败),安装一路next就行了,里面有一...原创 2019-02-15 17:29:06 · 5923 阅读 · 0 评论 -
Pcap包解析
之前一直做视觉相关的工作,近期接触激光雷达才发现,激光雷达传感器厂商保存数据的方式一般采用Pcap包的形式,虽然不太清楚为什么要这么做,但不管清不清楚总归只能跟着它这么搞。一个Pcap文件包括“Pcap报头”,“数据区”两个部分,其中数据区又分成多个数据包,每个包有报头和数据两个部分,总体结构可见下图:其中固定大小的为“Pcap报头”和数据包中的“数据报头”。“Pcap报头”大小为24个字...原创 2019-01-31 18:10:20 · 10382 阅读 · 0 评论 -
protobuf安装和简单使用demo
一直以来对于程序的数据管理都是自己写程序的实现的,大多就是读写文件的操作,感觉还好。近来发现谷歌有一个数据管理的神器,叫做Protobuf,可以轻松帮我们完成这些操作,因此乘着闲暇弄起来玩玩。因为本人比较喜欢VS,因此在Windows上编程的多,本篇先在Windows上实现protobuf的安装和简单的demo使用,后面Ubuntu的实现也会放上来。本文参考的是这篇博客,谢谢这位老哥,...原创 2018-12-10 16:23:11 · 1595 阅读 · 0 评论 -
"int main(int argc, char **argv)"型控制台程序的改造
有时候网上下载些开源代码,是用控制台程序写的,其入口程序接收命令行输入,且后续程序依据用户输出做处理,形如"int main(int argc, char **argv)"。这种程序如果要移植到别的地方并不是太方便,因此需要做改造。本人遇见这种情况一般的做法是直接将涉及到"int argc, char **argv"这两个变量的代码全部替换成别的,然后把入口函数改成"int main()"。...原创 2018-08-06 10:57:40 · 645 阅读 · 0 评论 -
C++ 获得指定路径下指定后缀的文件
CFileFind finder;vector<CString> allfile;//创建字符串容器vector<CString> getfile;bool bworking = finder.FindFile(L"I:\\testpicture\\*.*");//查询该文件夹下的所有图片while (bworking){ bworking = finde...原创 2014-04-12 18:27:03 · 3853 阅读 · 0 评论 -
C/C++ 图像处理(12)------图像の透视变换
图像的透射变换,在图像处理中经常被用到,本篇文章用以记录相关的一些算法研究和内容。由于作者近期比较忙,暂时只是记录了用OpenCV如何实现该算法,后续会加上相关的内容。#include #include using namespace cv;int main(){ //读入待处理图像 Mat image = imread("矫正后图像.jpg"); Mat原创 2016-07-24 00:08:48 · 5595 阅读 · 2 评论 -
Windows平台C++截屏程序
CWnd *pDesktop = GetDesktopWindow();CDC *pdeskdc = pDesktop->GetDC();CRect re;//获取桌面的大小 pDesktop->GetClientRect(&re);CBitmap bmp;//创建内存位图bmp.CreateCompatibleBitmap(pdeskdc, re.Width(), re.Height原创 2017-12-01 16:15:42 · 6242 阅读 · 1 评论 -
C++ 调节PCM音频音量大小
在用解码器解码音频数据得到PCM音频数据块之后,可以在将数据送给声卡播放之前调节其音量大小,具体的实现函数如下:void RaiseVolume(char* buf, UINT32 size, UINT32 uRepeat, double vol)//buf为需要调节音量的音频数据块首地址指针,size为长度,uRepeat为重复次数,通常设为1,vol为增益倍数,可以小于1{ if (!转载 2014-06-26 18:24:33 · 11463 阅读 · 6 评论 -
C++ 采集音频流(PCM裸流)实现录音功能
与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的。同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关工程,这个工程是用VS2013写的,如果是较低的版本就呵呵了。点击打开链接代码部分如下:#include "stdafx.h"#include #include #pragma原创 2014-06-16 01:08:59 · 19710 阅读 · 6 评论 -
DirectX 在VS2012及以上版本的配置
DirectX因其应用场景很广,已经被微软集成到了VS2012及以上的版本了,因此在这些版本使用DirectX做开发本身并不需要做任何配置,只需在需要的时候添加相应头文件和动态链接库即可。 但由于现在很多教程用的还是DirectX9,如浅墨大神写的《游戏编程之从零开始》等,其中基本都会用到d3dx9(一套封装在D3D之上的辅助库),而这套辅助库似乎没有集成到VS中,因此比较蛋疼,为了解决这个问题原创 2016-05-23 17:07:38 · 2671 阅读 · 0 评论 -
C/C++ 图像处理(8)------图像の柱面投影算法
图像的柱面投影算法,在360°全景图像应用中几乎一定会用到。而为何要用该算法,原因解释起来非常简单。(这里加上一张摄像头图像)可以想象几个摄像头围成一个圆圈,然后分别拍摄图像,而每两个相邻摄像头之间的图像会有一部分的重叠,原创 2016-02-02 02:53:21 · 16404 阅读 · 5 评论 -
VS 编译出现 LNK2005 XXX 已经在 XXX.obj 中定义
造成该问题的可能性比较多,本人将在今后遇到时添加进来,今天先放出本人遇到的一种情况。 多重包含含有变量定义的.h文件所造成 这个现象很容易重新,首先新建一个1.h文件,然后在里面写下如下代码#pragma onceint i = 0; 然后新建一个1.cpp,里面代码如下:#include "1.h" 再新建一个2.cpp,代码如下:#include原创 2015-12-23 20:15:30 · 16437 阅读 · 5 评论 -
C++ 数据写入文件与读回
软件制作过程常常需要将一些设置参数存成文件以供下次启动时调用,这时运用CArchive类来进行相关操作显得相当方便。将数据写入文件:int data = 123;CFile mydatafile(L"datasave.h264player", CFile::modeCreate | CFile::modeWrite);//datasave.h264player为文件名,使用的是相对路径...原创 2014-05-22 19:17:21 · 3720 阅读 · 0 评论 -
MFC 文件与文件夹相关操作
计算指定文件夹的总大小实现文件DWORD64 CMFCGETFOLDERSIZEDlg::GetFolderSize(CString szPath)//获得文件夹大小,返回值大小单位为M{ CString szFileFilter = szPath + L"\\*.*"; HANDLE hFind = NULL; WIN32_FIND_DATA fileinfo; DWORD6原创 2014-07-31 21:57:01 · 1643 阅读 · 0 评论 -
C语言FILE读写操作
头文件#include #include原创 2014-05-20 14:31:01 · 2303 阅读 · 0 评论 -
软件打包部署神器InnoSetup
今天弄了半天软件大爆发发行转载 2014-07-28 20:48:25 · 2177 阅读 · 2 评论 -
利用libjpeg库解码内存中的jpeg数据
在“VS2013编译libjpeg库”这篇文章中本人介绍了如何在VS中编译libjpeg库并提供了一个应用的范例,而这篇文章将在此基础上,介绍如何用libjpeg库来解码内存中的jpeg数据。 其实这个需求已经不新鲜了,网上也能找到别人提供的一些解决方法,之所以要再次写不过是因为本人觉得那些方法或多或少都有些不对的地方,或者说因为版本的迭代,本来是对的,现在有点问题。当然,本人并没有很费原创 2015-01-26 23:14:18 · 7537 阅读 · 1 评论 -
VS编译的可执行默认以管理员身份运行
文如其名,很多程序如果不以管理员身份运行的话无法操作到系统盘的一些文件,而往往有些时候这一功能又是必须要有的,虽说可以通过右键可执行文件修改其属性来设置默认执行权限为“以管理员身份运行”,然这毕竟麻烦。很多用户也根本就不会这么去做,是故让程序执行时就自己去要求管理员权限是最终的解决方法。在VS下面,这个问题其实很好解决,就是做如下操作:右键工程选择属性->配置属性->链接器->清单文件->UAC执原创 2014-11-12 21:25:22 · 8799 阅读 · 0 评论