- 博客(85)
- 收藏
- 关注
原创 qt生成静态库文件
原因:项目在修改一点东西时,会重新编译,里面的大文件也会被重新编译(会用很长的时间),为减少改动一点,就编译很长时间的情况,我将大文件编成了静态库文件。QMAKE_CXXFLAGS += -Wa,-mbig-obj 大文件编译加 ,防止报错。点击构建,生成静态库文件, .a mingw .lib msvc。3. 静态库编译宏,进行静态编译 必须加。4. 如果是mingw 编译器需要加。Qt Create 创建新项目。创建c++ Library。将要编译的文件放到里面。2. 导出为静态库。
2026-11-05 16:20:32
150
原创 OpenCV 边缘检测 Canny
⚠️ 坑点:这个阈值 100 是固定死的,光照一变效果就崩,后面可以改成自适应阈值。,你代码里 40 : 120 = 1:3,是标准配置OpenCV。,下一次再点按钮,会在上一次画了红线的图上继续处理。这是核心函数:从二值图里寻找白色区域的轮廓。轮廓层级信息,每个轮廓对应一个。推荐比例:高阈值:低阈值 =把画好轮廓的图覆盖掉成员变量。就是第 0 个轮廓的全部点。
2026-10-27 15:32:23
191
原创 opencv 图像处理(一)
const cv::Scalar &borderValue = cv::Scalar(0,0,0) // 填充边界颜色,默认黑色。仿射变换:可以实现平移、旋转、缩放、斜切(错切);int flags = cv::INTER_LINEAR, // 插值,和resize一样。cv::Size dsize, // 输出图尺寸 (宽,高)适合:需要保留轮廓、边缘的场景(人像、物体轮廓)3. 几何变换(缩放、平移、旋转、翻转)适合:图像里随机的黑白噪点(椒盐噪声)生成旋转矩阵(最常用)
2026-10-27 13:36:01
312
原创 MyBoard(二)
重写 mousePressEvent、mouseMoveEvent、mouseReleaseEvent。创建BoardGraphicsScene。1. 实现画Rect。
2026-09-17 18:10:17
30
原创 MyWeChat(一) QSS
2. QTextStream 文本读写,可以操作:文件、QString、QIODevice(如 QFile、QTcpSocket),1. 继承QWidget 自定义控件的QSS是默认不支持的。
2026-09-15 21:26:59
21
原创 FFmpeg 面试准备
I 帧:关键帧,独立完整图像,不需要参考其他帧,可单独解码。P 帧:前向预测帧,参考前面 I/P 帧做预测,只存差值。B 帧:双向预测帧,参考前面和后面帧,压缩率最高,但需要缓存后面帧,引入延迟。使用 FFmpeg 库,解封装 mp4,取出音视频 packet,解码得到 PCM 音频 / YUV 视频;使用 SDL 播放,以音频时钟作为基准做音视频同步;流程:打开输入上下文 → 读取包 packet → 解码成 frame → 处理 / 编码 → 输出。音视频不同步:视频播放音频不播放。
2026-09-10 21:18:39
187
原创 Qt 工业绘图板(组态 / CAD / 流程图)工业标准
工业组态、流程图软件(HMI 组态、流程图编辑器)主流架构:工具模式(策略模式),按钮只切换工具状态,画布原生鼠标事件创建图元。
2026-09-10 10:55:31
263
原创 刷题(一)
运行期函数有virtual修饰执行创建对象的函数,没有执行指针的版本。基类析构没有加virtual,静态绑定,只调用Base的析构函数,Son部分内存没有执行子类的析构函数,子类资源无法释放,造成内存泄漏。(5)mutable专门用于类成员变量,即使在 const 成员函数、const 对象中,该成员依然允许修改。(4)const 对象只能调用 const 成员函数,不能调用普通非 const 成员函数。(2)类内static修饰的变量是 类静态成员变量,它不属于任何一个对象,属于整个类。
2026-09-10 10:49:08
181
原创 Qt 面试(一)
源文件 (.cpp/.c):内部实现,不对外分发。头文件 (.h/.hpp):对外接口,放类声明、函数声明、宏。更新库不用重编译程序;调用者只包含头文件,链接库文件,看不到内部 cpp 源码。
2026-09-04 17:00:24
173
原创 SQL语句
SELECT * FROM student WHERE age >= 18 AND gender='男';INSERT INTO student(name,age) VALUES('张三', 18);A~F → 去左边子页 G~N → 中间子页 O~Z → 右边子页。VALUES('李四', 19),('王五', 20);左连接 LEFT JOIN ( 左边全部, 右边匹配 )更新 (where 更新条件)分组 group by。
2026-09-01 18:29:24
170
原创 ffmpeg 2个音频合并
3. 打开输出文件 FILE *fp = open("1.mp3","wb");// 将packet写入文件。// packet。4. 解码--> 编码 ---》 写入文件(重复两遍)1. 打开音频1,打开解码器。2. 打开音频2,打开解码器。
2026-08-27 10:20:43
59
原创 音量调节弹窗 自定义组件qt
* ==========8. volumeSlider弹窗(volumeSlider类,Qt::Popup 弹窗)内部的音量滑块 ========== *//* volumeSlider 是QWidget,弹窗顶层,它内部的水平QSlider,没有objectName,用后代选择器 */3. Qt::WA_WindowPropagation 弹窗事件可以传递给父窗口。配合Qt::Popup 处理父子层级、焦点传递、防止弹窗莫名消失。1. Qt::Popup 无边框,无标题栏。
2026-08-25 22:50:57
48
原创 OpenCV ncnn 人脸识别(一)
MobileFaceNet(ArcFace 轻量,ncnn param/bin)RetinaFace(mnet.25 已转好 ncnn)打开mingw自带的终端。生成CMakeFiles。运行CMakeFiles。
2026-08-24 15:54:46
255
原创 图片合并成视频 img2video ffmpeg
qDebug() << "获取packet失败";qDebug() << "写入失败";qDebug() << "发送packet失败";qDebug() << "打开输出文件失败";qDebug() << "打开输出流失败";qDebug() << "编码器打开失败";qDebug() << "信息获取失败";qDebug() << "打开解码器";qDebug() << "打开文件";qDebug() << "写文件头";qDebug() << "分配失败";qDebug() << "发送失败";
2026-08-22 07:30:22
91
原创 OpenCV LBPH算法人脸识别
qDebug() << "加载失败";// 提取人脸并将 图片大小设为 100 x 100。// 直接读取为灰度图。// 1. 准备人脸分类器。// 提取人脸 设置尺寸。// 2. 准备训练集。// 加载人脸分类器。// 3. 训练人脸。// 创建级联分类器。
2026-08-21 11:54:40
186
原创 音频解码 + Qt音频播放
qDebug() << "实际格式" << m_audioFormat->sampleRate() << m_audioFormat->sampleSize() << m_audioFormat->channelCount();// 使用最接近的格式。16. 从分装文件上下文中读取packet。17. 将packet 发送到解码器上下文。21. 转换音频帧(输入---》输出)18. 从解码器上下文中读取原始帧。7. 复制 解码参数。9. 申请原始帧结构体。// 是否支持这个格式。
2026-08-20 17:18:18
277
原创 OpenGL
1. QOpenGLShaderProgram 着色器程序管理类头文件 #include <QOpenGLShaderProgram>1. 创建QOPenGLShaderProgram 对象2. 添加着色器源码: addShaderFromSourceCode / addShaderFromSourceFile3. 链接程序: link()4. 绑定启用:bind()5. 绘制完成释放:release()
2026-08-20 01:41:09
178
原创 FFmpeg + qt 音频播放
13. 循环解码 (1. 从fmt_ctx读取完整数据包 2. 将数据包发送到解码器 3. 从解码器中读取解码后的音频帧 4. 计算需要输出的样本数,包括swr内延迟的 5. 重采样 6. 将数据发送到主线程)11. 创建音频缓冲区(根据输入的采样率和样本数, 获取输出的样本数以及可能积压的延迟样本数计算做大输出样本数,根据最大输出样本数和采样率计算缓冲区大小,申请缓冲区大小的内存)qDeubg() << "实际支持格式:" << m_audioFormat.sampleRate() << "Hz"
2026-08-13 11:13:12
204
原创 ffmpeg,视频解码 (视频播放器)
初始化:av_packet_alloc() / av_init_packet(AVPacket *) .data = nullpter .size = 0 分配结构体。拷贝参数: avcodec_parameters_to_context(AVCodecContext *, const AVCodecParameters *);int flags, //缩放算法标记(SWS_BICUBIC / SWS_FAST_BILINEAR)释放:av_frame_free(AVFrame **);
2026-08-10 13:15:56
270
原创 Opencv VideoCapture
/ 0 笔记本自带摄像头 1 是 第一个usb摄像头。Linux可填 /dev/video0。10. 设置摄像头参数 .set(propId, value)9. 获取视频属性 .get(propid)3. 打开本地视频文件。5. 判断是否打开成功。7. 判断是否读到末尾。
2026-08-09 11:14:32
252
原创 QT配置FFmpeg
2. 将 D:\ffmpeg-shared\ffmpeg-master-latest-win64-gpl-shared\bin *.dll 文件 复制到。3. 将 D:\FFmpeg\bin 添加到系统环境变量。4. 在终端 测试 ffmpeg。1. 在ffmpeg 官方网站下载。2. 解压到 D:\FFmpeg。创建FFmpeg_qt_demo。添加 include 路径、库。2. 配置 .pro。
2026-08-08 19:21:25
240
原创 opencv 人脸识别学习笔记(一)
cv::Size size, // 椭圆的长半轴 短半轴。cv::Point center, // 中心坐标。cv::Mat imgSrc, //在imgSrc 上画。int lineType = cv::LINE_8, // 线类型。cv::Point center, // 中心坐标。cv::Mat imgSrc, // 在imgSrc上画。
2026-08-08 11:53:52
332
原创 opencv 寻找匹配物体
1. MatcreatecopyTo2. 模板匹配InputArray image, // 源图像,待搜索大图InputArray templ, // 模板小图,要找的目标OutputArray result, // 输出结果矩阵int method, // 匹配算法InputArray mask = noArray() // 掩码(可选)
2026-08-07 18:59:48
245
原创 opencv 图片缩放旋转
作用:使用2x3的仿射矩阵,对图像进行(旋转、缩放、剪切,平移)仿射变换,将变换后的图片存入 imgDst。根据中心坐标、旋转角度、缩放参数 生成旋转仿射矩阵。32FC1 32为float C1 一个通道。2x3 的 仿射矩阵。
2026-08-07 11:55:41
218
原创 opencv 滤波
cv::Size(3,3) 卷积核大小,必须奇数, size越大越模糊。❗不是固定卷积核,权重是动态计算,每一个位置的权重都不一样,计算开销大。原理:在图像上滑动一个矩形窗口(卷积核),把窗口内所有像素。核窗口逐像素向右、向下滑动,遍历整张图,生成输出图像。和对应位置的像素做运算,实现模糊、锐化、边缘检测。ksize 窗口大小,取像素值,必须是奇数。双边滤波:保边缘的模糊,美颜算法底层。,赋值给窗口中心输出像素。全部底层都是卷积运算。
2026-08-07 00:03:47
264
原创 opencv 调节图片对比度和亮度
imgdata.cols, imgdata.rows, // 图片宽度(列数) 图片高度(行数)(const unsigned char *)imgdata.data, // Mat 像素数据首地址。static_cast<int>(imgdata.step), // 行步长。QImage::Format_RGB888 //生成的 QImage 格式。调节图片的亮度(beta)和对比度(alpha), 通过下面公式转换图片像素。
2026-08-06 18:13:08
129
原创 opencv4.6.0 + cmake3.25.1+ Contrib (qt5.14.2)
3. 设置OPENCV_EXTRA_MODULES_PATH 的值 为 Contrib_4.6.0_source/modules (上面创建的)的件的路径。7. 将 contrib-4.6.0.zpi 解压到contrib_4.6.0-source。6. 将 opencv-4.6.0.zip 解压到opencv_4.6.0-source。1. 下载cmake-3.25.1-windows-x86_64.msi。mingw-make -j8 (8内核的数量)2. 下载OpenCV-4.6.0.zip。
2026-08-06 16:31:40
264
原创 移植 alsa 到 gec6818
6. 新建 alsa-lib-1.2.16.1-install(名字随便)alsa-lib-1.2.16.1-install 上面创建的 文件夹。arm-none-linux-gnueabi 换成要用的工具链。1. 下载 alsa-lib-1.2.16.1。2. 放到 Windows 共享文件夹。7. 运行 configure。3. 复制到 ~ 下。
2026-08-03 21:04:09
218
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅