C++
文章平均质量分 68
_寒潭雁影
中科大IT向博士,熟悉MFC,C++,C等语言,参与过ffmpeg、机器视觉、并行计算、数据库等相关项目的研发和代码的编写http://blog.youkuaiyun.com/weixinhum为本人博客,上面记录了本人的一些技术总结
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用vcpkg包管理工具配置C++工程环境
做开发转眼间有十多年了,期间主要以C++为主,因为其蛋疼的没有自带的包管理工具,因此每次搞个工程都需要花大量的时间在环境的配置上。这些配置的操作无非就是去官网下载库,然后包含添加到工程里面,非常机械化,然而又不可避免。虽然配置到全局也是一种办法,然而又增加了工程间互相干扰的风险。最近又要开启一个新工程,遂研究一下已经标注了很久的vcpkg包管理工具,看看能不能用它来简化下这要命的机械化操作。这篇文章将主要介绍vcpkg包管理工具的安装和利用其为工程配置目标库的操作。原创 2024-03-27 17:35:37 · 1244 阅读 · 0 评论 -
C++结构体的内存分配细节
在使用C++处理固定长度和结构的数据传输时,直接把接收的数据视为字符数组并按协议约定的数据格式拼接,会涉及大量编程。因此,博主在做项目的时候倾向于在结构体中按协议定义数据类型,然后将接收的数据直接拷贝到结构体的内存中,以实现高效的数据解析。这样既减少了代码量,也提高了处理效率。在执行这种操作时,需要精确掌握结构体中内存分配的细节。原创 2023-12-25 21:53:54 · 829 阅读 · 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 · 3009 阅读 · 0 评论 -
使用C++调用控制台启动其他程序
在一些场景下,有界面的程序需要去调用控制台执行某些命令,这个时间可以利用ShellExecuteEx这个API来操作。具体如下:SHELLEXECUTEINFO commend;//命令对象memset(&commend, 0, sizeof(SHELLEXECUTEINFO));commend.cbSize = sizeof(SHELLEXECUTEINFO);commend.f...原创 2020-02-03 17:36:25 · 2835 阅读 · 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 · 1533 阅读 · 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 · 581 阅读 · 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 · 2673 阅读 · 0 评论 -
C++ 多线程编程相关
C++本身已经提供了多线程接口,这位老哥的文章写得异常的清晰,请直接移步。下面的东西年代比较久远,是调用Windows的API实现的,虽然也没有错,但还是不如直接用C++的API好,当然如果只需要考虑Windows的程序,也可以略为参考。---------------------------------不知道大家在 MFC 编程时有没有遇到过这样一个问题,当一个程序用到比较复杂的计算或...原创 2014-05-04 02:09:38 · 1358 阅读 · 0 评论 -
OpenMP基础使用
OpenMP是CPU并行加速相关的编译处理方案,VS很早的版本就对其提供了支持,不过默认是关闭的。要开启这一支持,只需要在项目的属性中设置就可以,具体选项为:配置属性->C/C++->语言 在右侧列表中有一项“OpenMP 支持”,下拉选择“是(/openmp)”就可以了。 其实本人是在前几天才知道有这个东西存在的,朋友跟我说这个东西用起来相比正常的开启多线程要方便很多,经过研究发现其原创 2015-03-19 21:29:33 · 2351 阅读 · 0 评论 -
DirectX 在VS2012及以上版本的配置
DirectX因其应用场景很广,已经被微软集成到了VS2012及以上的版本了,因此在这些版本使用DirectX做开发本身并不需要做任何配置,只需在需要的时候添加相应头文件和动态链接库即可。 但由于现在很多教程用的还是DirectX9,如浅墨大神写的《游戏编程之从零开始》等,其中基本都会用到d3dx9(一套封装在D3D之上的辅助库),而这套辅助库似乎没有集成到VS中,因此比较蛋疼,为了解决这个问题原创 2016-05-23 17:07:38 · 2889 阅读 · 0 评论 -
MFC RS232串口通信
PC程序跟RS232串口进行通信算是比较老的题目了,不过老归老,只要用这个接口的硬件还在,就难免要去折腾它。而这个时候就会发现老的坏处在于资料都是半截入土,拍一拍烟尘四起,抖一抖蛛丝乱飞的玩意。 现在做这个的基本都是用的SerialPort这个类,而这个类的最新更新已经有一段岁月,所以本人在下载了这个东西之后,费了些功夫才将其修改到能运行在VS2015版本的PC程序上,在此把修改完的版本原创 2015-09-04 22:38:49 · 14191 阅读 · 6 评论 -
C/C++ 图像处理(7)------图像の球面贴合算法
关于图像的球面投影,是全景应用中比较常见的技术,而现有的一些资源大多写的不太好,比较晦涩。在经过一段时间的摸索之后,发现了这个博客写的相对可以,本文的实现也将其作为重要的参考,如果看过本文之后有什么不明白或者觉得不好的地方可以去看看。 在展看本文之前,先来看看下面的两张图片:原创 2016-01-10 18:33:06 · 7199 阅读 · 7 评论 -
C++ 类型转换归纳
本篇根据编程遇到的类型转换慢慢往上加东西。 CString 转 intCString str("123");//如果其中填的不全是数字,则返回从左到右碰到第一个非数字字符前的数字字符数值,如果最左边不是数字字符,返回0int i= _ttoi(str); CString 转 char*(UNICODE字符集环境)#include &...原创 2014-05-12 23:19:18 · 1231 阅读 · 0 评论 -
C/C++ 图像处理(16)------图像轮廓の最小外接矩形
有时做图像处理,会遇到图像中大部分信息是冗余的情况,以下图为例: 假设图中黑色部分才是我们需要研究的对象,则外围的一堆白色是我们希望去掉的,这个时候用最小外接矩形来框住黑色部分,进而截取该部分的信息而忽略掉其他的信息变得实用。 下面,就给出查找图像轮廓中最小外接矩形的代码,后面有空再给出在图像中截取外接矩形的部分成为新图像的代码。#include "opencv2/highgui/highg原创 2017-01-24 17:44:11 · 8733 阅读 · 0 评论 -
C/C++ 图像处理(9)------图像の桶形畸变矫正
广角镜头的摄像设备拍摄出来的图像经常会有桶形畸变的问题。原因在于广角镜头使用的是凸透镜,初中物理知识告诉我们凸透镜会对光线起汇聚作用,这是光的折射造成的。而离镜头中心越远,折射效果越强,因而其拍出来的照片会以镜头中心为圆心,呈圆形向外扩展失真,如下图所示: 像上面这样的图像,如果用在一些还原性要求较高的场景是不行的,需要对图像做畸变矫正。而由于很多时候我们并不知道摄像头的物理...原创 2016-03-19 17:31:19 · 23869 阅读 · 21 评论 -
MFC 用 Direct2D 显示图像到 Picture Control 中
2016年第一天,新年快乐!!! 由于一直跟视频这块打交道,对于图像编解码和显示等方面都有所研究。最近遇到一个性能要求比较高的应用,原本的GDI绘图导致到线程负荷比较重,造成整个系统不稳定,因而生了要用Direct2D来取代的念头。经过一番研究后发现,Direct2D原来是这么的简单方便,而效率也比GDI有了显著的提升。废话不多说,下面还是直接上代码吧。 本人一开始是在网上搜的原创 2016-01-01 02:29:16 · 5378 阅读 · 3 评论 -
C/C++ 图像处理(13)------双目图像の深度图生成
双目图像可用于生成具有深度的三维图像,其是通过模仿动物双眼的工作机制而来。关于其相关的算法,现如今研究的人很多,但仍离动物双眼的视觉效果千里之遥,只能用在非常有限的范围之内。 近来由于项目所需,要用到双目图像生成深度图,因此做了些研究,然并未深入理解其原理,因而也不在此处做更多的讨论。 本篇文章记录下用网上给出的标志双目图像,且利用OpenCV提供的相关函数计算出双目图像的深度图的实现过程。原创 2016-10-21 16:57:58 · 13972 阅读 · 6 评论 -
C/C++ 图像处理(11)------图像の仿射变换
图像的仿射变换,用以改变观看图像的视角,在图像处理中经常被用到,本篇文章用以记录相关的一些算法研究和内容。由于作者近期比较忙,暂时只是记录了用OpenCV如何实现该算法,后续会加上相关的内容。#include #include using namespace cv;int main(){ //读入待处理图像 Mat image = imread("矫正后图像.jp原创 2016-07-23 17:04:50 · 5497 阅读 · 0 评论 -
C/C++ 图像处理(10)------相近图像の匹配
近期做项目调研的时候刚刚好需要用到图像匹配相关的算法,因此在这里做下记录。 相近图像的匹配,其实归根结底只有一个目的,就是找到两张图像中反映相同现实位置的几个像素点,然后获得到这些像素点的坐标,以供后面仿射变换等算法进行处理。 其基本思路如下: 1. 检测两张图像的特征点 2. 匹配检测到的特征点 3. 对匹配到的特征点对进行排序 4. 得到匹配度高的前n对特征点 5. 在原创 2016-07-13 00:43:24 · 6377 阅读 · 2 评论 -
DirectX 在MFC框架下的应用
一般而言,用到DirectX进行编程时,会直接在win32项目下自己创建窗口,然后在该窗口上进行操作。然而,如果已经用MFC写了一部分代码,然后突然发现用DirectX来处理3D的显示部分会比较给力,这时就需要将两者结合起来了。 由于之前作为新手时研究过一段时间的DirectX,在心里留下了一大片阴影,因此直到最近被逼无奈才又开始搞这个。结果发现,对于其跟MFC框架的结合并没有想象中的那么困难,原创 2016-05-23 18:51:08 · 5168 阅读 · 1 评论 -
C/C++ 图像处理(8)------图像の柱面投影算法
图像的柱面投影算法,在360°全景图像应用中几乎一定会用到。而为何要用该算法,原因解释起来非常简单。(这里加上一张摄像头图像)可以想象几个摄像头围成一个圆圈,然后分别拍摄图像,而每两个相邻摄像头之间的图像会有一部分的重叠,原创 2016-02-02 02:53:21 · 17366 阅读 · 5 评论 -
C++ PDF文档相关操作
关于在Windows平台下用C++实现PDF文档制作的相关操作,有不少库可以帮助我们实现。本人因为一开始先接触到PDFlib,所以就用这个库做了个小工程,本篇文章为该工程用到的相关操作总结。 PDFlib并非是开源库,要使用需要付费,否则会有一个让人不要不要的水印在页面的后头。当然,我大天朝从来不理会这些,有压迫的地方就总有雷锋站出来搞个破解版,该库也不例外,可以到这位雷锋的博客地点去下原创 2015-08-26 16:56:26 · 15174 阅读 · 6 评论 -
OpenCV 用dnn深度学习模块检测图像
最近在做人物目标检测相关的项目,发现OpenCV从3.1(或者更找)提供了dnn深度学习模块(需要自行编译进去,具体的可见这篇文章),因此下下来试试看。难度全在编译那边了,编译完成后反倒很简单,下面就简单的看一下: 新建一个空白的Win32项目 找到“opencv_contrib-master\modules\dnn\samples”文件夹(如果不知道这是什么,请去看看之前编译的那篇文章)的四个原创 2017-04-29 18:17:25 · 17641 阅读 · 6 评论 -
C++ 采集音频流(PCM裸流)实现录音功能
与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的。同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关工程,这个工程是用VS2013写的,如果是较低的版本就呵呵了。点击打开链接代码部分如下:#include "stdafx.h"#include #include #pragma原创 2014-06-16 01:08:59 · 20123 阅读 · 6 评论 -
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 · 11971 阅读 · 6 评论 -
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 · 6491 阅读 · 1 评论 -
C/C++ 图像处理(12)------图像の透视变换
图像的透射变换,在图像处理中经常被用到,本篇文章用以记录相关的一些算法研究和内容。由于作者近期比较忙,暂时只是记录了用OpenCV如何实现该算法,后续会加上相关的内容。#include #include using namespace cv;int main(){ //读入待处理图像 Mat image = imread("矫正后图像.jpg"); Mat原创 2016-07-24 00:08:48 · 5731 阅读 · 2 评论 -
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 · 3965 阅读 · 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 · 747 阅读 · 0 评论 -
protobuf安装和简单使用demo
一直以来对于程序的数据管理都是自己写程序的实现的,大多就是读写文件的操作,感觉还好。近来发现谷歌有一个数据管理的神器,叫做Protobuf,可以轻松帮我们完成这些操作,因此乘着闲暇弄起来玩玩。因为本人比较喜欢VS,因此在Windows上编程的多,本篇先在Windows上实现protobuf的安装和简单的demo使用,后面Ubuntu的实现也会放上来。本文参考的是这篇博客,谢谢这位老哥,...原创 2018-12-10 16:23:11 · 1750 阅读 · 0 评论 -
Pcap包解析
之前一直做视觉相关的工作,近期接触激光雷达才发现,激光雷达传感器厂商保存数据的方式一般采用Pcap包的形式,虽然不太清楚为什么要这么做,但不管清不清楚总归只能跟着它这么搞。一个Pcap文件包括“Pcap报头”,“数据区”两个部分,其中数据区又分成多个数据包,每个包有报头和数据两个部分,总体结构可见下图:其中固定大小的为“Pcap报头”和数据包中的“数据报头”。“Pcap报头”大小为24个字...原创 2019-01-31 18:10:20 · 10900 阅读 · 0 评论 -
VS2017 WinPcap的配置及简单的使用demo
一般涉及到网络编程,我们会用上层的socket相关API进行,但有些时候我们需要从底层进行抓包,在Windows上,我们可以用WinPcap来做这件事。官网地址:https://www.winpcap.org/install/default.htm首先在上面圈中的两个地方分别下载安装包和开发包。然后先安装(注意这个是必须先做的,不然哪怕运行代码也会失败),安装一路next就行了,里面有一...原创 2019-02-15 17:29:06 · 6213 阅读 · 0 评论 -
Pytorch1.0的(C++ & cpu)版本在Windows上的使用
之前一直用Pytorch做的网络训练,最近想看看训练出来的模型在C++上的表现(毕竟稍微注重效率的工程都用的C++写),因此花了点时间研究了一波。因为PyTorch的Python版本和C++版本使用的文件描述有区别,因此需要先把Python版本训练的模型转换成Torch Script形式(相信这一点不太方便的地方后面会被FB大佬们改掉的)。转换的代码如下:import torchimpor...原创 2019-03-15 18:28:35 · 2536 阅读 · 0 评论 -
C++ 播放音频流(PCM裸流)
直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应哦)。当然我自己也用VS2008(VS2013好用太多,强烈推荐还是用VS2013,只是它的工程太大,上传起来相当费劲,所以还是用VS2008重写了。。)写了个例子上传了,如果有需要下载地址如下(自己没什么下载分了,所以弄了3分,见谅哈哈):点击打开链接这份代码是打开原创 2014-06-11 01:13:42 · 23125 阅读 · 7 评论 -
C++ CString字符串操作
字符串中的中英文字符问题在CString中,中英文字符以及数字字符所占的宽度是不一样的,因此在一些固定长度的场景中要分开处理,为此需要将字符串的中英文以及数字字符区分开来。可以使用CStringA(cut).GetLength();//其中的cut为CString对象来获得字符串所占的字节数,中文占两个字节而英文及数字占一个字节,因此如果上述获得数值与cut.GetLength...原创 2014-05-14 21:42:17 · 2823 阅读 · 0 评论 -
C++ 获得系统时间与代码耗时计算
头文件#include <windows.h> 主体代码SYSTEMTIME sys;GetLocalTime(&sys);CString systemtime;systemtime.Format(L"%4d/%02d/%02d-%02d:%02d:%02d", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys...原创 2014-05-23 23:46:57 · 2144 阅读 · 0 评论 -
C++ 指定路径文件夹存在与否查询及文件夹创建
CString folder=L"H:\\h264视频"; //存文件夹路径CFileFind finder; //在mfc中有这样一个类叫做CFileFind,if (finder.FindFile(folder))//如果返回值为1表示路径存在,为0则表示不存在{ MessageBox(L"文件夹存在!");}else{ MessageBox(L"文件夹不存在!");原创 2014-05-24 21:01:15 · 2301 阅读 · 0 评论 -
C++ 多线程编程解决CPU占用率高问题
在用C++进行多线程编程的时候,时常需要写一些类似于死循环的结构来执行代码,这些死循环如果没有经过处理一直开着,那么CPU的占用率就会居高不下的做着很多无用的操做。为解决这个问题我们可以通过在各线程中的适当位置添加Sleep函数来休眠该线程,使其少做这些无用的操作。经过这个处理,正常能压缩掉一半以上的CPU占用。原创 2014-06-30 23:11:40 · 11861 阅读 · 3 评论 -
VS搭建Boost编程环境
近来做项目需要用到Boost环境,上网一搜发现了一篇转载 2014-07-03 22:07:12 · 1340 阅读 · 0 评论 -
C++ pcm音频裸流的压缩和解码
跟视频一样,对于音频的传输,往往也需要经过压缩,下面是关于海思提供的PCM音频裸流文件压缩和解码库的运用,对比一个文件与其压缩、解码操作后的数据,可以明显的发现PCM->ADPCM的音频压缩过程是有损的。关于文件的对比,本人使用的是BCompare 这个软件,绝对是程序员必备的神器啊!如果没有的童鞋建议大家下来玩玩。下载地址:点击打开链接由于是用海思提供的压缩和解码库,所以其实并不需要做什么复原创 2014-06-16 00:37:44 · 6481 阅读 · 0 评论
分享