C/C++
文章平均质量分 79
ze言
c/c++ Qt opencv linux
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++ 中 原子锁、互斥锁、自旋锁的区别和详细用法
最生活化的比喻来解释 C++ 中原子锁、互斥锁和自旋锁的区别和用法,让小白也能秒懂!原创 2025-08-06 20:22:35 · 812 阅读 · 0 评论 -
为什么现代 C++ (C++11 及以后) 推荐使用 constexpr和模板 (Templates) 作为宏 (#define) 的替代品?
本文对比分析了C++宏(#define)与现代替代方案(constexpr和模板)的优劣。宏采用简单的文本替换机制,容易导致作用域污染、类型不安全、运算符优先级错误和参数多次求值等问题,且难以调试。constexpr提供编译时计算能力,具有类型安全、作用域明确、调试友好等优势,适合替换数值计算类宏。模板则支持类型安全的泛型编程,是标准库的基础。文章建议尽量避免使用宏,优先采用constexpr执行编译时计算,使用模板实现泛型功能,以编写更健壮、安全的现代C++代码。原创 2025-08-06 20:05:42 · 1105 阅读 · 0 评论 -
GCC的 __attribute__((section)) 详解
GCC的__attribute__((section))详解 摘要:attribute((section("SDRAM_FUNC1")))是GCC特有的扩展属性,用于将函数强制放入指定内存段。该技术主要用于嵌入式系统优化,通过将函数(如home_speed_init)从默认的.text段转移到SDRAM等特定内存区域,解决内存资源受限问题。使用时需配合链接器脚本定义SDRAM_FUNC1段,并确保SDRAM已初始化。典型应用场景包括:释放内部SRAM空间、优化大型函数性能等。注意事项包括原创 2025-07-10 17:33:09 · 1005 阅读 · 0 评论 -
C++ std::atomic_flag实现自旋锁
原子操作就是在多线程程序中“最小的且不可并行化的”操作,就是说多个线程访问同一个资源时,有且仅有一个线程能对资源进行操作。在C++11之前,使用第三方API可以实现并行编程,比如pthread多线程库,但是在使用时需要创建互斥锁,以及进行加锁、解锁等操作来保证多线程对临界资源的原子操作,这无疑增加了开发的工作量。不过从C++11开始,C++从语言层面开始支持并行编程,内容包括了管理线程、保护共享数据、线程间的同步操作、低级原子操作等各种类。原创 2023-01-12 14:54:02 · 894 阅读 · 1 评论 -
c++ std::funciona代替函数指针——结合std::bind
std::function是函数模板类(是一个类)。包含在#include 中。以前没有这个类的时候,我们在想定义一个回调函数指针,非常的麻烦。typedef void(*ptr)(int,int)// 这里的ptr就是一个函数指针而使用了std::function这个类的时候,我们可以这样使用,来替换函数指针。例如std::function 是一种通用、多态的函数封装。它的实例能存储、复制及调用任何可调用 (Callable) 目标——原创 2023-01-06 17:38:35 · 2737 阅读 · 0 评论 -
C++程序之高亮显示C++代码
C++程序之高亮显示C++代码原创 2022-12-06 14:20:05 · 1139 阅读 · 0 评论 -
C++ 操作 (读写)json 文件及jsoncpp的配置
为什么要用json文件呢?我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用word存,利用Excel存,如果我们要求比较高,还可以使用数据库存。相对于txt,word来说,json格式更加明确,获取重要信息非常方便。相对于xml来说,json格式更加简洁,存储同样的文件,花费的内存更小。相对于Excel来说,json更适合存储字符类文件。Excel相当于比较简单的数据库了。相对于数据库来说,json更加方便,数据库我们还需要做一些设置,安装一些软件。原创 2022-10-09 15:59:16 · 11561 阅读 · 1 评论 -
C++ CreateFileMapping 内存映射实现快速读取文件
共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信。因为是通过内存操作实现通信,因此是一种最高效的数据交换方法。本文主要讲述的使用内存映射文件的目的是访问磁盘上的数据文件。你可以不必对文件执行I / O操作,并且可以不必对文件内容进行缓存。1、CreateFileMapping// 创建一个内存映射文件的内核对象2、MapViewOfFile // 将内存映射文件映射到进程的虚拟地址中3、OpenFileMapping //原创 2022-07-08 10:42:59 · 12443 阅读 · 0 评论 -
C++的跨平台(Linux)开发——总结
设备和文件IO Linux 内核函数 内核函数和API区别(fopen、open) API函数通过库函数 进行操作 内核直接操作硬件 从效率上:内核函数比库函数快 从移植性上:内核几乎无法跨操作移植,库函数比较方便 文件操作 open函数 read函数 阻塞式函数——没读取到内容是不会往下执行的 wirte函数 create函数 close函数 lseek函数 fcntl函数 文件夹操...原创 2022-05-25 12:29:22 · 1425 阅读 · 0 评论 -
基于VS2019 C++的跨平台(Linux)开发(1.2)——设备管理及文件IO
一、引言理解设备和文件的关系 理解系统调用和系统API等关系 掌握系统调用的工作过程 掌握系统调用open/read/write/fcntl等使用二、Linux中的设备管理1、设备无关性为了提高操作系统的可适应性和可扩展性,目前几乎所有的操作系统都实现了设备的独立性(Device Independence)Linux采用文件系统管理硬件设备,所有的设备都看成是特殊的文件(目录、套接字也可以是文件),从而将硬件设备的特性及管理细节对用户隐藏起来,实现设备无关性。2、设备管理的特点原创 2022-03-08 23:40:17 · 1102 阅读 · 5 评论 -
Qt+OpenCV联合开发(二十五)--直方图均衡化(equalizeHist)
一、简述直方图均衡化直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法,可以用于图像增强、对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见。此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量。二、函数原型equalizeHist函数c++原型参数:输入图像 输出图像注:此函数只支持单通道图像(灰度图像)的均衡化三、实现效果下面三张分别对应原图、灰度图像、灰度图像均衡化.原创 2022-02-06 23:30:31 · 1385 阅读 · 0 评论 -
Qt+OpenCV联合开发(二十四)--图像二维直方图(calcHist)
一、函数原型calcHist函数作用:计算一维或多维图像直方图c++原型:参数:images:输入图像的指针,一定是同样的深度(CV_8U or CV_32F)。且一个图像可以有多个channes。 nimages:输入图像的个数 channels:计算直方图的channes的数组。如果输入的图像的个数为2,第一张图像有0,1,2共三个channel,第二张图像只有0一个channel,那么输入就一共有4个通道,如果int channels[3] = {3, 0, 1},那么就原创 2022-02-06 22:39:38 · 845 阅读 · 0 评论 -
Qt+OpenCV联合开发(二十一)--图像放缩与插值
一、插值算法图像的插值处理主要有最近邻插值、线性插值(常用,速度快)、立方插值、卢卡斯插值。分别对应如下INTER_NEAREST = 0 INTER_LINEAR = 1 INTER_CUBIC = 2 INTER_LANCZOS4 = 4相关的应用场景有几何变换、透视变换、插值计算新像素二、函数原型resize函数作用:图像放缩c++原型:参数:InputArraysrc-原图像 OutputArraydst-输出图像,当参数ds...原创 2022-02-04 22:08:36 · 2083 阅读 · 3 评论 -
Qt+OpenCV联合开发(二十)--图像像素类型转换与归一化
一、基本知识大家知道,一张图像默认的存储格式是8位字节类型的,实际上在opencv中可以转换不同的数据类型,用convertTo()的API函数实现。另外一个维度上面你可以对数据的取值空间scale即0-255之间压到0-1取值范围之间,这个就用到归一化函数normalize(),简单点说就是进行归一化。四种归一化的方法:(0-255归一化到0-1)MORM_MINMAX(最常用) MORM_INF MORM_L1 MORM_L2二、函数原型1、convertTo函数作用:将数原创 2022-02-04 21:25:31 · 2218 阅读 · 0 评论 -
Qt+OpenCV联合开发(十九)--鼠标操作与响应
一、二、实现效果三、代码注:1、因为自定义的on_draw方法有接收userdata参数,所以setMouseCallback的userdata一定要传,不然程序直接异常结束2、用rectangle函数画完矩形一定要及时更新图像(imshow),不然绘制不出来3、要想看到这个绘制过程,要添加EVENT_MOUSEMOVE事件,还要增加判断,只有鼠标左键按下的时候才进行绘制,每次绘制结束的时候...原创 2022-02-04 18:18:04 · 3307 阅读 · 1 评论 -
Qt实现登录后播放视频(二阶段--2)
一、简述QListWidget和视频解码播放1、QListWidget2、视频解码播放参考以下链接QT+ffmpeg+多线程的视频播放器的基本使用二、核心代码三、实现效果原创不易,转载请注明出处:2实现登录注册参考链接:https://blog.youkuaiyun.com/hml111666/article/details/122707123本文源码链接:...原创 2022-02-03 16:50:27 · 1587 阅读 · 4 评论 -
Qt+OpenCV联合开发(八)--参数传递调整亮度、对比度
一、简述addWeighted函数1、作用:可以将两张相同大小,相同类型的图片融合。可以实现图片的多种特效2、c++原型:参数一:src1,表示需要加权的第一个原数组参数二:alpha,第一个数组元素权重参数三:src2,第二个原数组参数四:beta,第二个数组元素权重参数五:gamma,一个加到权重总和上的标量值(见下面公式)。不要太大,不然图片一片白。总和等于255以上就是纯白色了参数六:dst,输出的图片,它和输入的两个数组拥有相同的尺寸和通道数参数六:dtyp原创 2022-01-27 17:24:36 · 1145 阅读 · 0 评论 -
Qt+OpenCV联合开发(十六)--图像几何形状绘制
一、坐标系电脑屏幕的坐标系,原点(0,0)在左上角,越往下y越大,越往右x越大,最大值在屏幕右下角二、函数原型1、rectangle函数作用:用来绘制一个矩形框的,通常用在图片的标记上c++原型:参数一:img 图像参数二:Rect对象的rec,Rect()函数是画出图像中的矩形。Rect(x,y,width,height),x, y为左上角坐标,width, height则为长和宽参数三:color 线条颜色 (RGB) 或亮度(灰度图像 )参数四:th原创 2022-02-02 11:49:54 · 2325 阅读 · 1 评论 -
Qt+OpenCV联合开发(十二)--图像像素的逻辑操作
一、基本知识对图像中的位操作:- bitwise_and //按位与- bitwise_or //按位或- bitwise_xor //按位异或取反操作:- bitwise_not 二、函数原型1、逻辑操作1、 bitwise_and 、bitwise_or 、bitwise_xor 的参数都一样:参数一:输入图片1参数二:输入图片2参数三:输出图片2、bitwise_not 的参数:参数一:输入...原创 2022-01-28 14:33:15 · 1222 阅读 · 0 评论 -
Qt+OpenCV联合开发(七)--调整图像亮度
一、简述createTrackbar函数1、作用:创建可调节滚动条,实现图像的亮度调节2、c++原型:参数一:轨迹条名字参数二:窗口名字,即对应namedWindow()创建窗口时填的某一个窗口名参数三:一个指向整型的指针,表示滑块初始位置参数四:表示滑块达到最大位置的值(滑块最小的位置的值始终为0)参数五:指向回调函数,默认值为0;每次滑块位置改变时,这个函数都会进行回调;并且这个函数的原型必须为void XXX(int,void*);其中第一个参数是轨迹条的位...原创 2022-01-27 13:38:08 · 1972 阅读 · 0 评论 -
Qt+OpenCV联合开发(十五)--像素值统计
一、知识点最小(min) 最大(max) 均值(mean) 标准方差(standard deviation)API 知识点:求最大最小值minMaxLoc 计算均值与标准方差meanStdDev注:minMaxLoc函数非常有用,在opencvDNN模块推理或者结果,特别是对于一些分类的结果,你要获取index,获取最大可能性对应的index 就是通过这个API二、函数原型1、最大最小值——minMaxLoc参数一:InputArray类型的src,输入单通道数组(原创 2022-02-02 09:59:29 · 1250 阅读 · 0 评论 -
Qt+OpenCV联合开发(十八)--多边形填充与绘制
一、知识点API 知识点:1、polylines&fillPoly2、drawContours二、函数原型1、polylinespolylines的c++原型:参数一:img 作为画布的矩阵(图像) 参数二:pts 折线顶点数组(pts的类型为InputArrayOfArrays, 而InputArrayOfArrays的本源是vector) 参数三:isClosed 是否是闭合折线(多边形) 参数四:color 线条颜色 (...原创 2022-02-02 19:19:30 · 2752 阅读 · 3 评论 -
Qt使用MVC、数据库单例模式实现登录注册(二阶段--1)
一、简述MVC和单例模式1、MVC设计模式作用:有效的分离数据和用户界面。 组成:模型层model(表示数据)、视图层view(表示用户界面)、控制层controller(定义用户在界面上的操作)。2、MVC框架图3、使用MVC架构实现用户登录的流程登录界面发送请求到控制器 控制器委托用户模型去做用户数据的查询 用户模型查询用户表得到的结果 用户模型把查询得到的结果返回给控制器 控制器将用户模型返回的结果反馈给用户登录界面控制器只有一个,模型有很多个,但用户模型只有一个.原创 2022-01-26 20:10:08 · 2486 阅读 · 3 评论 -
Qt+OpenCV联合开发(六)--图像像素的算术操作
一、简单的加减乘除操作1、加减法代码(乘除类似)2、加减法效果:亮度的增加或减少二、利用API的加减乘除操作 Mat dst = Mat::zeros(image.size(), image.type()); Mat m = Mat::zeros(image.size(), image.type()); m = Scalar(6, 6, 6); multiply(image,m,dst);//乘法操作 api namedWin...原创 2022-01-26 16:04:47 · 923 阅读 · 0 评论 -
c++基础——结构体
一、基本概念结构体属于用户自定义的数据类型,允许用户存储不同的数据类型,可以容纳需要的任意多数据项二、定义及使用1、语法: struct 结构体名 { 类型名 成员名;类型名 成员名;};这里结构体名是类型名不是变量名 声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。2、初始化:与变量和数组一样,结构体变量也可以在声明时初始化3、通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体名 变量名 = { 成员原创 2022-01-23 17:20:38 · 7802 阅读 · 0 评论 -
c++基础——指针
一、基本概念指针作用: 通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 利用指针变量保存地址(指针就是地址) 二、指针变量的定义和使用1、示例#include <iostream>using namespace std;int main(){ //1、指针的定义 //定义变量n int n = 6; //指针定义语法: 数据类型 * 变量名 ; int * p; //指针变量赋值,指针指向变量n的地址原创 2022-01-23 11:57:33 · 1968 阅读 · 0 评论
分享