- 博客(339)
- 资源 (42)
- 问答 (4)
- 收藏
- 关注
原创 中值滤波算法与SSE2指令集并行优化
中值滤波算法是经典图像处理中极为常见的操作,一般我们通过调用OpenCV或者是Matlab直接进行使用,以至于有种它本来就很容易实现且速度很快的错觉。近来用到中值滤波算法,因为不想用到OpenCV库或者Matlab而对其实现研究了一番,才发现其中有很多值得注意的细节。下面我们结合着OpenCV的源码实现来讲。
2024-03-31 19:53:05 96
原创 使用vcpkg包管理工具配置C++工程环境
做开发转眼间有十多年了,期间主要以C++为主,因为其蛋疼的没有自带的包管理工具,因此每次搞个工程都需要花大量的时间在环境的配置上。这些配置的操作无非就是去官网下载库,然后包含添加到工程里面,非常机械化,然而又不可避免。虽然配置到全局也是一种办法,然而又增加了工程间互相干扰的风险。最近又要开启一个新工程,遂研究一下已经标注了很久的vcpkg包管理工具,看看能不能用它来简化下这要命的机械化操作。这篇文章将主要介绍vcpkg包管理工具的安装和利用其为工程配置目标库的操作。
2024-03-27 17:35:37 485
原创 希望取代LaTeX的神器Typst
Typst是一个值得高度关注的新兴工具,虽然发展时间只有不到一年,在排版的细节方面可以想象其相比LaTeX会有很大的不足。然而在其强大的易用性,以及绝大部分的用户并不需要太细节的排版这一事实面前,本人相信它将极大的压缩LaTeX的用户。尽管可能如LaTeX大佬“李阿玲”所说,Typst本身并没有什么大的技术突破,然而本人认为摒弃沉重的旧包袱,把东西做的简洁好用,本身就是一种突破。本人乐见Typst成功挤压LaTeX,让那一堆莫名其妙的报错和混乱的宏包去死吧!
2024-01-21 11:28:54 1125 1
原创 使用Ctrl+Alt+T快速打开Windows Terminal终端
在Ubuntu中我们通常使用Ctrl+Alt+T来快速打开终端,这样即炫酷又方便。然而在Windows并没有默认快捷键打开终端的操作,需要我们折腾一番。操作也不复杂,可以通过一般人都不知道用来干什么的“快捷方式”来实现。
2024-01-20 17:59:45 563
原创 PPT右键保存图像为指定分辨率
其中图像大小在PPT中是以厘米表示的,而PPT中右键粘贴为图像的DPI为150(这个值研究了也不知道怎么修改),因为DPI的含义为每英寸包含像素点个数,一英寸约为2.54厘米,因此最后需要除以2.54将单位转为厘米。该操作要是熟练的话是蛮方便的,不过如果遇到需要出比较专业的图像的情况,还是选择Adobe Illustrator 这种专业的工具靠谱一些。有了上面的公式,就可以算出上面第4点提到的指定值的计算公式为:目标分辨率×2.54÷DPI。这时保存的图片分辨率为:图像在PPT中的大小×DPI÷2.54。
2023-12-28 00:15:26 695
原创 C++结构体的内存分配细节
在使用C++处理固定长度和结构的数据传输时,直接把接收的数据视为字符数组并按协议约定的数据格式拼接,会涉及大量编程。因此,博主在做项目的时候倾向于在结构体中按协议定义数据类型,然后将接收的数据直接拷贝到结构体的内存中,以实现高效的数据解析。这样既减少了代码量,也提高了处理效率。在执行这种操作时,需要精确掌握结构体中内存分配的细节。
2023-12-25 21:53:54 425
原创 ROS学习番外篇15—nuScenes-LidarSeg数据集的多帧数据整理
前面我们介绍了如何下载和解析nuScenes-LidarSeg数据集,然而处理的对象还是单帧点云。本篇博客将对数据集提供的点云系列数据进行解析和重新整理,使得程序可以非常方便的按照顺序读取850个系列中的每个系列的点云数据。运行上面的代码,可以得到顺序记录每个系列点云信息的850个文件,放置在sample_data_lidar_seq文件夹(这个文件夹需要手动创建)中。有了这些文件,就可以按照顺序处理点云。
2023-08-09 18:03:52 388
原创 ROS2系统学习番外篇2---用VSCode开发ROS2程序
在中已经介绍了如何创建ROS的工作空间以及包。在开发大型工程时,往往需要在IDE下面进行开发,因此本篇介绍使用VSCode来搭建ROS2开发环境的方法。首先用VSCode打开ROS2的工作空间。
2023-08-06 15:03:01 1801
原创 spconv1.2.1库的编译与安装
SpConv是一个稀疏卷积库,在点云相关的深度学习算法中用的比较多。由于目前官方升级到了2.0,然而有些算法(比如审稿人要我复现的Cylinder3D)仍需要用到1.2.1版本,因此本人花了亿点点时间折腾了一下。。。
2023-08-04 22:44:45 910
原创 将程序打包成单一一个可执行文件
最近做了一个界面交互渲染的小项目,项目主要的功能是通过TCP接收数据然后在界面中渲染出对应的状态。由于用户的最大需求是炫酷,于是为了方便实现特殊的交互逻辑,我选择用freeglut自行实现了界面的交互和渲染,又用OpenCV做了部分图像的绘制以及几个弹出窗体的实现。项目完工后打包出来发现,一个这么简单的程序除了exe可执行程序外,居然需要附带9个其他文件,总的大小也到达了57.6M。有点蛋疼,于是研究了一下怎么将其全部打包成一个exe文件。
2023-08-02 00:32:15 378
原创 OpenCV弹出窗体设置
使用OpenCV偶尔会用到其弹出窗体来显示图像,大部分情况看看算法处理的结果是够用的。然而有时希望用其作为程序的子窗口显示些不断刷新的信息就存在两个问题:1. 没有判断用户是否点击关闭窗口的操作,因此哪怕用户点击了关闭,窗体也会一直显示2. 没有设置图标的功能,因此弹出的窗体并没有图标
2023-08-01 10:28:26 1045
原创 word文档批量生成工具(附免费软件)(按Excel表格内容自动替换内容生成文档)
要实现批量生成word文档的功能,其难度其实非常小,在程序实现层面上可以直接拆解为:读取xlsx文档的内容本人实现的工具将xlsx文档(Excel文档)的第一行内容定义为word文档中需要被替换的内容,后面每一行对应的内容则为要替换的内容。也就是第一行每一列的内容都会被后面一行同列的内容替换,然后生成一个新的word文档。这一部分的技术细节可见OpenXML库(office文档读写库)的安装这篇文章。识别word文档中的特定字段并将其替换为目标字段。
2023-06-25 01:36:48 2734 3
原创 OpenXML库(office文档读写库)的安装
OpenXml库是由微软维护的一个开源的Office文档读写库,其与其他类似用途的库的比较可以看到。在C#中使用OpenXml非常简单,只需要使用NuGet安装其程序包即可,流程如下(NuGet这东西真的是个神器啊!):项目名称位置右键->管理NuGet程序包->浏览->搜索"OpenXml"->安装"DocumentFormat.OpenXml"完成上面的操作,OpenXml就已经配置在工程中了。
2023-06-24 18:32:45 1995
原创 使用OpenXML库替换docx文档(Word文档)中的特定字段
在批量生成Word文档的应用中,最常见的需求莫过于替换掉文档中的特定字段以生成新的文档。利用OpenXML库可轻松实现这一需求。
2023-06-23 17:52:47 1213 2
原创 神经网络实用工具(整活)系列---使用OpenAI的翻译模型whisper实现语音(中、日、英等等)转中字,从此生肉变熟肉---提高篇(附带打包好的程序)
本篇文章将逐一介绍解决这些遗留问题的方法,并把整个。对于编程小白,可以直接跳到文章的最后下载作者打包好的玩一玩。
2023-06-15 10:37:56 2017
原创 300行代码实现FFMpeg+CUDA+OpenGL的硬解码+渲染全流程
为了达到上面所述的目标,本人尝试了非常多的操作。因为要跨平台(Windows+Linux),所以不能使用dx系列接口(如dxva2等是Windows独占的接口)的方案,这直接就堵死了最好实现的一个路径。而更加严重的问题在于只有dx系列的接口兼容了AMD和英伟达的显卡(毕竟Windows用户量摆在那里),其他的接口都是厂商独有的,如英伟达的CUDA。因此,如果要跨平台使用一套代码,基本上就只能认厂商了(这里说基本上,而没说完全,是因为Vulkan应该可以做到,只是本人暂时没时间去研究)。
2023-06-05 16:51:03 815 1
原创 神经网络实用工具(整活)系列---使用OpenAI的翻译模型whisper实现语音(中、日、英等等)转中字,从此生肉变熟肉---基础篇
最近在做神经网络的研究,偶然间看到OpenAI开源出了一个多国语音转文字的模型,脑海里突然想到余大嘴在华为发布会发布实时语音翻译时满屏弹幕的“???”和“!!!”,于是决定做一个多国语音转简体中文字幕的软件来玩一玩。想法是这样的:通过OpenAI最新发布的翻译模型whisper(可以翻译200多种语言,且其中部分语言的翻译效果已然接近甚至超过人类的神器)加上自己写的一点点程序,做一个傻瓜化的多国语言转中文字幕的软件。
2023-06-02 00:55:54 3609
原创 神经网络实用工具(整活)系列---使用silero-vad标注语音中的人物对话
当我们使用神经网络来进行音频转文字的操作时,往往需要先把存在语音的音频片段筛选出来再送到音频转文字的神经网络中去筛选,否则总会出现奇奇怪怪的问题。在本篇文章中,我们介绍一种比较常用的做法,也就是用pytorch提供的silero-vad语音活性检测网络来标记出语音中存在人物对话的部分。废话不多说,直接上代码(代码的操作很简单,就是将一个名为1.mp3的音频文件进行语音活性检测,然后将检测到的语音片段存在一个叫做1的文件夹中,文件名包含了片段开始的时间戳。
2023-06-02 00:35:27 1756 1
原创 Windows的Powershell终端增强
Ubuntu上一直用的Oh My Zsh强化终端,体验非常nice。最近在Win上做东西比较多,于是也想把Powershell这个简陋的终端加强一下。说干就干,网上查了一圈,发现大部分人用Oh My Posh来操作,因此试了一下,发现卡的想哭(好像是因为作者为了兼容性用Golang 去实现Oh My Posh。。。只能说神操作,服气)。更重要的问题在于,不同于Ubuntu,要让Powershell具备历史命令提示这样的功能只需要安装Powershell的模块,而这些模块并不基于Oh My Posh。
2023-05-30 23:56:55 1102
原创 ROS学习番外篇15—nuScenes-LidarSeg数据集的多帧数据整理
前面我们介绍了如何下载和解析nuScenes-LidarSeg数据集,然而处理的对象还是单帧点云。本篇博客将对数据集提供的点云系列数据进行解析和重新整理,使得程序可以非常方便的按照顺序读取850个系列中的每个系列的点云数据。运行上面的代码,可以得到顺序记录每个系列点云信息的850个文件,放置在sample_data_lidar_seq文件夹(这个文件夹需要手动创建)中。有了这些文件,就可以按照顺序处理点云。
2023-01-29 21:15:30 564 1
原创 无人机/无人车仿真软件学习与实践---CoppeliaSim教程3---群体性能优化
上一篇教程我们讲述了怎么使用Python连接CoppeliaSim对里面的无人机进行控制,也讲述了怎么通过多进程的方式进行调用。在大多数情况下学会这些手段就足够进行仿真操作,可将仿真的重点转到算法的验证上,然而对于群体无人机算法的验证则是个例外。这类算法的验证往往需要对一堆无人机进行仿真,如果不对仿真性能进行优化,跑一次实验可能得半天到一天。这样一来速度慢不说,很多bug的调试也会因为无法快速获得反馈而变得无从下手。在本篇教程中,我们将深入探讨如何对仿真软件进行性能优化,以实现快速的大规模无人机集群仿真
2022-05-23 16:20:43 1109 1
原创 Windows下使用DCMTK开源库对DICOM协议的医学图像进行解析与显示
DICOM(Digital Imaging and Communications in Medicine),是用于医学影像处理、储存、打印、传输的一组通用标准协定。目前,被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领域得到越来越深入广泛的应用。要获取以DICOM格式存储的图像,可以选择阅读其格式文档自行解析,也可以用开源库来进行。本篇博客我们将介绍如何在Windows下使用DCMTK开源库对DICOM协议的图像进行解析与显示。首先下载
2022-05-12 11:48:13 2792
原创 OpenGL工程实现实用教程5---freeglut库按钮控件实现
在前面的文章中,我们已经介绍了如何使用OpenGL在窗口中渲染中文文字。将这些文字放到窗口内指定的位置,便是GUI中常见的“文字标签”。在本篇文章中,我们将进一步介绍如何用OpenGL来实现另外一种常见GUI控件“按钮”。“基础按钮”控件的实现要实现一个“基础按钮”控件非常简单,在想要放置按钮的位置画出一个矩形,当鼠标放置到该矩形上并做出点击操作时改变其绘图(比如把矩形缩小),并在后台运行相应的单击响应代码即可。具体的步骤如下:判断鼠标左键按下的位置是否在按钮所在的位置判断函数bool OnMo
2022-04-07 11:50:57 1187 1
原创 ROS学习番外篇13—SemanticKITTI数据集的IMU等原始信息获取
最近正在研究的算法需要用到点云的IMU信息,SemanticKITTI是针对KITTI的odometry数据集进行的精细标注,因此很多的原始信息可以从KITTI的odometry数据包中获得,比如车辆的姿态信息POSE等,然而odometry数据集并不包含车辆的IMU等原始信息(该数据原本是用来进行slam等算法的评估的),因此IMU等原始信息得从KITTI的原始数据中获得,这就要求我们知道odometry数据与原始数据之间的对应关系。在下载了一百多g数据并仔细匹配了整整两天之后,本人终于不太完美地完成了
2022-04-06 21:01:11 985
原创 ROS2系统学习番外篇1---用CLion开发ROS2程序(编程、编译、调试)
之前一直用VSCode开发ROS,最近入职和青基的事情终于告一段落,也用学校的邮箱申请到了CLion的高校免费资格(听之前实验室的同学们说CLion很方便),遂开始考虑是不是要用CLion取代VSCode作为ROS的开发IDE。于是说干就干,开始动手搭建基于CLion的ROS2开发环境,这篇博客是这个折腾的全过程。创建ROS2工程首先,先按照下面博客的操作创建一个ROS2的工程:https://blog.csdn.net/weixinhum/article/details/123800798?spm
2022-03-29 16:02:42 1876 1
原创 ROS2系统学习3---第一个“Hello World”程序---即工作空间创建与包创建
工作空间创建ROS2创建工作空间和ROS1基本相同。首先创建工作空间文件夹,命名为ROS2(可以命名别的),然后在该文件夹下新建一个src文件夹,直接退回到ROS2文件夹下,运行如下代码进行编译。colcon build编译完成后就会在工作空间中生成build、install、log三个文件夹。打开install文件夹,可以看到与ROS1的devel很类似的几个文件。以上我们就完成了ROS2工作空间的创建。对比ROS1,可以看到ROS2工作空间的创建基本一致,只是少了初始化的环节,并且包的编
2022-03-28 17:24:58 1846
原创 无人机/无人车仿真软件学习与实践---CoppeliaSim教程2---无人机的仿真与外部控制
在正式介绍怎么用CoppeliaSim进行无人机的仿真和外部控制之前,我们先看看Python连接CoppeliaSim需要作什么操作。Python连接CoppeliaSimCoppeliaSim在“C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming”文件夹下放置了一系列与其连接所需要的库。针对python语言的连接库在“C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programm
2022-03-23 20:34:11 3066
原创 无人机/无人车仿真软件学习与实践---CoppeliaSim教程1---Win10/Win11下的安装
下载地址:https://www.coppeliarobotics.com/downloads选择教育版本(Edu)下载,本人下载的是CoppeliaSim V4.3.0版本(本教程全部基于改版本编写,因此如果版本升级并废弃了部分代码即可导致教程的部分错误,需要自行到官方阅读文档进行修改)安装下载完成后双击安装安装过程一路next,无法选择安装路径,最终安装的位置为“C:\Program Files\CoppeliaRobotics”分辨率设置本人使用的是4K屏幕,安装完打开程序发现字体非常
2022-03-23 20:21:50 1790
原创 无人机/无人车仿真软件学习与实践---序言
之前读博的时候一直使用团队自主设计的无人车在路上做实验,验证感知代码时则使用公开数据集和车上实时录制的bag包进行,对仿真器的掌握程度一直存在于听说有这么一个东西的程度。毕业之后,新加入的团队主要搞的是无人机,而无人车平台虽然有部分硬件,但离可以实车测试还有一段距离。为了能快速获得感知算法的验证能力,本人准备用接近半年的时间来进行无人机/无人车仿真软件的研究。研究的对象为AirSim、CarLa和CoppeliaSim这三个主流仿真器。研究的目标则是借助仿真器实现如下的功能:实现输入控制信息,无人
2022-03-23 20:08:59 1024
原创 Python多进程编程
多进程简单实现Python中的多线程实现是在一个物理CPU线程内部进行切片实现的,因此并没有实现真正意义上的多线程(通过在Python多线程中写死循环然后查看CPU的占用情况就能明确该论述)。那是不是Python语言就直接无法利用多个CPU核心线程呢?并不是,Python通过multiprocessing多进程模块实现了该功能。代码实现也很简单,如下所示:import multiprocessingdef worker(interval): print(interval)if __n
2022-03-23 11:31:11 1182
原创 OpenGL工程实现实用教程3---freeglut库中文文字渲染
使用freeglut渲染英文字体有个非常简单的办法,那就是直接调用glutBitmapCharacter函数进行渲染。代码如下://要显示的字符char str[20] = "Hello world!!!";int n = strlen(str);//设置要在屏幕上显示字符的起始位置glRasterPos2i(0, 0);//逐个显示字符串中的每个字符for (int i = 0; i < n; i++) glutBitmapCharacter(GLUT_BITMAP_TIMES_R
2022-03-15 20:34:52 1164
原创 OpenGL工程实现实用教程2---freeglut库的输入响应
在PC上用户的输入操作一般分为键盘+鼠标两种,freeglut库已经帮我们封装好了这些操作的消息响应,只需要用户注册并编写响应逻辑即可。键盘响应键盘的消息注册函数为glutKeyboardFunc,消息响应回调函数可定义如下://第一个参数表示按下的按键的ASCII码。//其余两个参数提供了当键按下时当前的鼠标位置(相对于当前客户窗口的左上角)。void keyboardFunc(unsigned char key, int x, int y){ switch (key) { cas
2022-03-15 20:28:50 651
利用FFmpeg将Jpeg图片转为任意视频容器格式
2015-05-20
利用libjpeg库解码内存中的jpeg数据范例
2015-01-24
libjpeg库的示例工程,实现Jpeg转Bmp
2015-01-19
MFC全屏显示demo
2014-08-13
FFmpge视频解码(从H264视频流到图像)
2014-07-13
FFmpge视频压缩(从图像到H264视频流)
2014-07-12
FFmpeg开发包,适用VS各版本
2014-07-11
notepad++二进制(十六进制)查看插件
2014-05-20
RGB色彩空间转CMYK色彩空间工具.zip
2021-11-24
C++PCM音频格式录音(双缓存MFC版本)
2017-07-26
填完坑,配置好并写完bat的caffe深度学习
2017-05-07
opencv dnn模块的demo
2017-04-29
VS2015 X64+OpenCV3.2.0+opencv_contirb
2017-04-29
利用FFmpge进行视频压缩(从图像到H264视频流)新版
2016-09-11
MFC 多语言环境的实现
2016-04-20
几何绘图工具GeoGebra
2016-01-31
最新版本FFmpeg库x64平台解码h264视频demo
2016-01-23
图像的球面投影工程和可执行程序
2016-01-10
C# WPF DataGrid控件实现三级联动
2015-10-27
C# WPF 模拟键盘输入与UI控件进行交互
2015-10-26
MFC实现RS232串口通信程序和辅助程序
2015-09-04
PDFDemo和资料
2015-08-26
多进程接收UDP广播的丢包问题
2020-10-27
MFC框架下自定义类中定义多线程问题
2020-01-06
用dxflib开源库打开dxf文件出错
2016-12-03
DirectX 关于球体纹理映射该怎么做
2016-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人