- 博客(38)
- 收藏
- 关注
原创 .nii.gz文件读取方式
".nii.gz"文件是一种常见的用于存储神经影像数据的格式,它通常包含了三维或四维的图像体素数据,以及与磁共振扫描相关的一些重要元数据,比如扫描参数、特征描述等等。而".nii"表示未经压缩的文件格式,而".nii.gz"则表示经过gzip压缩后的文件格式。
2024-12-02 14:55:11
636
原创 Ubuntu20.04 安装汉语拼音后重启登入黑屏
在虚拟机上装了一个Ubuntu用来学C++,默认没有安装中文输入。切换输入法的时候突然死机,重启登入直接黑屏。百度后发现有不少老哥和我这个问题一模一样,按照他们的方法也终于整好了,虚惊一场。如果是虚拟机的话,第一步首先建议拍个快照,防止删除了不该删除的东西导致系统崩溃。删除安装的汉语包,然后尝试按下:ctrl+alt+F1回到登录界面登录。在登陆界面按下:ctrl+alt+F3 进入命令行终端,使用命令行登入。命令会自动识别并删除系统中不再需要的依赖软件包。命令用于从系统中卸载不再需要的软件包。
2024-09-26 10:39:31
886
4
原创 C++11委托构造函数
在C++11标准中,引入了委托构造函数的概念,允许一个构造函数调用同一个类的另一个构造函数来完成部分或全部的初始化工作。委托构造函数可以减少代码重复,并提高代码的可维护性。在上面的示例代码中,EventLoop类包含了两个构造函数,,通过调用带参数的构造函数完成初始化工作。构造函数会调用带字符串参数的构造函数。委托构造函数会被调用。
2024-09-03 16:58:12
296
原创 STL库中的set与mutliset
Set是C++标准库中的一种关联容器,用于存储不重复的元素,并按照特定的排序规则自动进行排序。Multiset也是C++标准库中的关联容器,但与Set不同的是,Multiset可以存储多个相同的元素。Multiset与Set的区别在于Multiset允许存储重复元素,而Set不允许。在C++中,Set的元素是唯一的,如果插入重复元素,那么Set会直接忽略重复值。在使用Multiset时,常用的操作与Set相似,包括插入、删除、查找、获取元素个数和判断是否为空。
2024-09-02 19:49:20
311
原创 C++删除目标类型的const属性(const_cast)
C++删除目标类型的const属性可以采用const_cast方式进行实现。使用const_cast进行类型转换时,应确保转换后的对象确实是可修改的,否则将导致未定义行为。在使用const_cast时,应谨慎考虑是否真正需要改变const属性,避免对程序的正确性产生影响。其中,new_type表示要转换的新类型,expression表示要进行转换的表达式。是C++中的一种类型转换操作符,用于删除目标类型的const或volatile属性。
2024-09-01 16:08:06
1014
原创 readv函数和writev函数
在介绍readv函数和writev函数之前,首先需要介绍一个结构体:iovec结构体。它是C语言中的一个结构体,用于描述一个缓冲区的地址和长度。iovec结构有两个成员,分别是和。是一个指针,指向缓冲区的起始地址。是一个size_t类型的整数,表示缓冲区的长度。通常使用iovec结构数组来操作一组缓冲区,每个iovec结构表示一个缓冲区。
2024-03-31 14:28:25
594
原创 通过socketpair()函数实现同一进程内部的进程间通信(IPC)
本文通过socketpair()函数创建了一对相关的套接字(sv[2]),然后使用fork()函数创建了一个子进程。通过创建一对文件描述符,可以在同一进程内模拟两个不同的套接字,并通过这些套接字进行进程间的通信。通过使用文件描述符,可以方便地在同一进程内部进行通信,而不需要借助额外的进程间通信机制(如共享内存、消息队列等)来实现进程之间的信息交换。在这个调用完成之后,会有两个进程同时运行,一个是父进程,一个是新创建的子进程。语句之后执行不同的代码,从而实现了进程的分离和分别执行不同的逻辑。
2024-03-25 15:29:58
734
原创 POLL轮询事件类型使用方法
POLL是一个系统调用和对应的事件类型,用于异步地等待多个文件描述符上的事件。它是一种用于轮询事件的方法,可以用于实现IO多路复用。
2024-03-18 15:59:23
698
原创 利用位运算符设置标志位
在写程序的过程中,会碰到需要修改标志位的情况。比如需要设置一个文件标识符可读或可写,首先想到的是利用int变量(1表示不可读不可写 ,2表示不可读可写,3表示可读不可写,4表示可读可写)。但是这样不直观,比较难记。在计算机底层使用0、1存储,因此我们可以使用int变量进行位运算来设置标志位
2024-03-14 14:36:40
646
原创 HTTP请求中URL编码转为中文
例如,在UTF-8编码中,汉字 "中" 的编码是 "E4 B8 AD",它会被URL编码为 "%E4%B8%AD"。这里的 %E4 对应十六进制的 "E4",%B8 对应 "B8",%AD 对应 "AD"。要将URL编码转为中文,可以使用URL解码的方法,即将%后跟两位十六进制数字的编码转换为对应的字符。由于UTF-8编码中,一个中文字符通常由三个字节表示,所以在URL编码时会产生三个十六进制的转码。例如,%E2 表示的是十六进制的编码,对应的ASCII码是 226。
2024-03-12 10:59:06
3388
原创 C语言scandir函数获取文件夹内容
scandir函数用于列举指定目录下的文件列表,并将结果存储在一个动态分配的数组中。将指向一个动态分配的指针数组,每个指针指向一个。结构体,表示一个文件或子目录的元数据。以下是一个简单示例,演示如何使用。
2024-03-10 15:36:42
876
原创 struct stat结构体变量
struct stat结构体变量,可以获取文件或目录的这些属性信息,然后利用这些信息进行相应的操作。是一个用于保存文件或目录的属性信息的结构体。它在标准库中定义,并在。通过调用stat()
2024-03-07 19:58:27
676
原创 动态分配和静态分配
动态分配相比于静态分配的主要优点是具有灵活性和可调整性,在程序运行过程中可以动态分配和释放内存。然而,使用动态分配需要注意内存泄漏的风险,并且需要手动管理内存的分配和释放,增加了程序的复杂性。动态分配的内存空间在程序需要时分配,不再需要时需要手动释放。静态分配的内存空间在整个程序执行期间都存在,而动态分配的内存空间在需要时分配,在不再需要时需要手动释放。静态分配在编译时将内存分配给变量,动态分配在运行时根据需要手动分配内存空间。静态分配的内存空间存在于栈中,而动态分配的内存空间存在于堆中。
2024-02-29 19:08:16
1260
原创 内存中栈和堆的区别
栈上的内存分配和释放是自动的,遵循函数的调用和返回规则,当函数调用结束时,栈上的局部变量会自动被释放。堆上的内存分配和释放需要手动管理,对内存的管理比较灵活,但也需要注意手动释放内存,以防止内存泄漏。栈上的数据的生命周期是与其所在的作用域绑定的,当作用域结束时,栈上的数据就会自动释放。由于栈上的内存分配和释放是由编译器自动完成的,所以访问栈上的内存速度相对较快。栈上的内存是连续的,相邻变量的地址紧挨在一起。栈上的内存分配和释放是由编译器自动完成的,堆上的内存分配和释放是由程序员手动操作的。
2024-02-29 19:05:55
570
原创 简单总结内存泄露
内存泄漏会导致程序占用的内存不断增加,当泄漏的内存达到一定程度时,系统的可用内存会被耗尽。这可能导致程序崩溃、运行缓慢或其他异常。为了避免内存泄漏,应当及时释放动态分配的内存,并确保引用动态分配内存的指针不会在其使用完毕后丢失。使用智能指针等资源管理工具可以帮助自动释放内存,减少内存泄漏的风险。内存泄漏是指在程序运行过程中,动态分配的内存没有被释放或释放不当而导致内存无法再被使用的情况。这会导致程序占用的内存不断增加,最终耗尽系统的可用内存。
2024-02-29 19:04:20
355
原创 c++智能指针的介绍
智能指针是C++标准库提供的一组用于管理动态分配的资源(如堆内存)的智能化指针。智能指针的主要作用是确保资源在不再需要时被正确地释放,从而避免内存泄漏和悬挂指针等问题。一个简单的例子是使用unique_ptr智能指针管理动态分配的内存。在上面的代码中,我们通过new运算符动态分配了一个int类型的内存空间,并在使用完之后忘记释放该内存空间。这样会导致内存泄漏。为了解决这个问题,我们可以改用unique_ptr智能指针来管理这段动态分配的内存。
2024-02-29 19:01:04
411
原创 使用CMake和GNU make 在Linux上编译并使用开源库jsoncpp
JsonCpp是一个用C++编写的开源JSON序列化和反序列化库。它提供了一种方便的方式来读写JSON数据,并支持将JSON数据与C++对象进行相互转换。JsonCpp库支持C++11标准,并可以轻松地与其他C++库集成。JsonCpp库的使用非常简单,可以通过包含头文件和链接库来使用。它能够在各种平台上运行,并且具有良好的性能和稳定性。JsonCpp库被广泛应用于各种领域,例如游戏开发、网络通信、数据交换等。
2024-02-19 11:35:24
1412
原创 C++中的IO多路复用(select、poll、epoll)总结
I/O多路复用(IO multiplexing)是一种并发处理多个I/O操作的机制。它允许一个进程或线程同时监听多个文件描述符(如套接字、管道、标准输入等)的I/O事件,并在有事件发生时进行处理。传统的I/O模型中,通常使用阻塞I/O和非阻塞I/O来处理单个I/O操作。如果需要同时处理多个I/O操作,那么需要使用多个线程或多个进程来管理和执行这些I/O操作。这种方式会导致系统资源的浪费,且编程复杂度较高。而I/O多路复用通过提供一个统一的接口,如select、poll、epoll。
2024-02-16 11:49:39
3183
1
原创 VScode利用嵌套CMake编译需要生成两个可执行文件的项目
CMake支持嵌套结构,您可以在一个CMakeLists.txt文件中使用add_subdirectory()函数来引入其他目录中的CMakeLists.txt文件。这样可以形成CMake项目的嵌套结构。
2024-01-24 12:07:10
1479
原创 利用cmake配置VScode的C++运行与调试环境
通过使用CMake工具,我们可以方便地配置VS Code的C++运行和调试环境。CMake提供了一种跨平台的方式来生成构建文件,使得我们可以将项目与VS Code无缝集成,并通过简单的设置,轻松地实现编译、运行和调试C++代码的功能。本文将介绍如何使用CMake配置VS Code的C++环境,并详细说明设置运行和调试选项的步骤。
2024-01-17 16:17:05
10410
原创 两种不同的pthread库
pthread库分为两种,一种是Windows平台的pthread库(pthread for win32),另一种是Linux平台的pthread库(mingw-w64提供的gcc编译器(posix版本)提供的pthread)。其中两个库的实现有些许不同,例如对于pthread_t线程id的定义不同。
2024-01-11 16:14:37
680
原创 c++在Windows环境下编译器无法导入pthread库的解决方法
在成功安装好MinGW和g++编译器之后,在vscode当中依然无法导入Pthread库。经过查找资料发现pthread库还要单独安装一下才能使用。注:安装之后vscode依然报错的话,可以尝试将vscode重新启动,让它重新读取。
2024-01-10 15:59:47
890
原创 使用vsCode创建并运行一个简单的c++项目
介绍了在 VS Code 中安装 C++ 扩展的步骤,包括搜索并安装扩展、创建项目文件夹、编写 C++ 源文件、配置生成任务以及创建 `tasks.json` 和 `launch.json` 文件。文章还提及了如何使用编译器进行编译,并运行生成的可执行文件。此外,文章还介绍了如何在 `tasks.json` 文件中添加动态链接库指令。这些详细指导可以帮助在 VS Code 中更加方便地进行 C++ 编程,并且能够更好地理解和定制调试和构建任务。
2023-12-21 20:42:27
24541
1
原创 c++编译时报错undefined reference to `__imp_WSAStartup‘的解决方法
这些错误表明在Windows环境下,编译器无法找到涉及网络编程的函数的定义。这是因为这些函数属于Winsock库(ws2_32)。所以需要确保在编译时链接到ws2_32库。因为WSAStartup、socket、htons、bind、listen、accept、recv、send和WSACleanup等函数都是在ws2_32库中定义的。
2023-12-21 17:19:41
3934
1
原创 QT程序运行报错:E:\xxx\SogouInput\Components\
而报错中的E:\xxx\SogouInput\Components\,看上去有个搜狗输入法的文件夹,其实和输入法没什么关系,更多的可能是变量空间地址的问题。看来碰到了这种不好解释的问题还是得老老实实Debug。
2023-11-04 17:42:35
944
1
原创 Dlib库安装方法
打开网站:Links for dlib,选择一个和自己python版本对应的.whl文件, 创建一个python3.6的环境, 输入:pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl进行安装,在本环境中进入python,导入python包:importdlib,回车。如果没有报错,则安装成功
2023-08-16 10:46:54
3117
1
原创 Windows cmd中出现错误:“‘make‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的解决方法
遇到这种“make不是内部或外部命令,也不是可运行的程序或批处理文件。”的报错,若不是拼写输入错误,则大概率是没有对应的工具,需要下载并安装
2023-08-15 14:32:04
14280
7
原创 学习记录:利用预训练ssd_mobilenet_v1_coco模型实现Tensorflow物体检测
COCO数据集由微软出资标注并发布的大规模数据集,它可以用于对目标检测模型的训练,同时可以用于语义分割、图像标题生成等任务。图像中的目标都经过十分准确的segmentation位置定位,COCO数据集包括90个目标标签。
2023-08-11 15:13:01
1045
1
原创 学习记录:Inception-V3图片分类
Inception-V3模型是谷歌在大型图像数据库ImageNet上训练好的一个图像分类模型,这个模型可以对1000种类别的图像进行分类,是一种用于实现ImageNet上大规模视觉任务的一种神经网络。imagenet_2012_challenge_label_map_proto.pbtxt (编号到字符串的对应关系)imagenet_synset_to_human_label_map.txt (字符串到类别名的对应关系)在进行预测之前,我们需要将后面两个关系合成为一个编号到类别名的对应关系,方便后续处理。
2023-08-09 12:05:48
1290
原创 goLong中 fmt.Scanf无法读取空格字符串的解决方法
开自己小项目开发的过程中,发现我在控制台输入带空格的字符串的时候,使用fmt中自带的scanf()方法,它只能读取到空格之前的内容。我们可以自己写一个Scanf函数,主要利用的是bufio库中的一行一行读取的方法:ReadLine()该方法在服务器端展示客户端发来的信息只有空格前的内容(发送内容为:hello world!可以看到服务器端只获取到了hello这个单词,同时客户端也出现了不合理的信息读取错误。
2023-07-24 16:57:17
382
原创 学习记录:对抗式生成网络GAN
生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型。
2023-07-22 15:32:00
269
原创 学习记录:变分自编码器
VAE全称是Variational AutoEncoder,即变分自编码器。它不再是对一个样本直接生成一个隐层空间上的点,而是将经过神经网络编码后的隐藏层假设为一个标准的高斯分布,然后从这个分布中采样一个特征,再用这个特征进行解码,期望得到与原始输入相同的结果。
2023-07-20 14:11:49
187
1
原创 学习记录:利用Keras+CNN实现自编码图像去躁
本文记录了自己学习相关代码后对本项目代码的一些注解。开始导入Keras包,准备入训练数据。编码,将其转化为低维度的隐性层。解码,将其还原为7*7*32。使用训练好的网络模型进行预测。首先导入mnist数据库。首先展示加入噪声之后的图片。将训练出来的图像展示出来。
2023-07-18 13:01:29
497
1
原创 在Python中使用imread与imresize时出现错误的解决办法
在Scipy库中imread()可以将图片读入项目中,imresize()可以重新设置图片大小。但是在调用的时候pycharm报以下错误:AttributeError: scipy.misc is deprecated and has no attribute imread.
2023-07-15 12:20:24
1246
1
原创 GoLang变量的四种定义方法
在自己快速跑完一套Go入门课之后,动手写代码。写着写着发现参考的代码里面有部分全局变量的定义方式还是有点模糊, 这里的定义不是没有声明这个变量的类型吗?后面查阅自己的笔记之后发现是上面的第三种使用方式(可以自动类型判断),看来学习的过程中还确实要返回去复习。
2023-07-11 15:47:32
516
1
原创 tensorflow-gpu安装流程
第二个点就是要在environment variable中添加自己的cuda安装路径:在Name一项中填LD_LIBRARY_PATH, Value一项中填写安装的cuda的lib64路径(找不到的话可以定位到Cuda安装路径中,然后直接利用搜索框搜索lib64)其中2.xx.xx是tensorflow的版本,也可以不指定,不过由于安装tensorflow和其他工具版本对应要求非常严格,建议按照对应版本进行安装。如果不是,那么可以下拉框,然后选择自己的安装时候的版本。如果没有报错,那么说明安装成功。
2023-07-07 12:15:29
2027
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人