- 博客(47)
- 资源 (1)
- 收藏
- 关注
原创 FFmpeg学习:FFmpeg4数据结构分析
AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。在这个结构体中,除了一些回调函数接口之外,有一个变量const char *name,该变量存储了协议的名称。下列代码显示了获取元数据并存入meta字符串变量的过程,注意每一条key和value之间有一个"\t:",value之后有一个"\r\n"注意,这个结构体并不在FFMPEG提供的头文件中,而是在FFMPEG的源代码中。URLContext:每种协议,有一个协议操作对象和一个关联的协议对象。
2023-05-21 16:43:05
845
原创 C++实现二进制码流和字符串码流互转
废话不多说上代码#include <iostream>#include <vector>#include <string>void SecToStr(const std::string strSrc, std::string& strDst){ for (size_t j = 0; j < strSrc.size(); j = j+8) { std::string strTmp = strSrc.substr(
2021-04-21 00:21:41
848
原创 实现set
package setimport ( "bytes" "fmt")func main() {}type HashSet struct { m map[interface{}]bool}func NewHashSet() *HashSet { return &HashSet{m: make(map[interface{}]bool)}}//添加 true 添加成功 false 添加失败func (set *HashSet) Add(e interfac.
2021-04-20 00:49:34
176
原创 context包的用途
context包的用途Context通常被译作上下文,它是一个比较抽象的概念,其本质,是【上下上下】存在上下层的传递,上会把内容传递给下。在Go语言中,程序单元也就指的是Goroutine
2021-04-20 00:47:24
292
原创 make和new区别
new1.new的作用是初始化一个指向类型的指针(*T)2.new函数式内建函数,函数定义:func new(Type) *Type3.使用new函数来分配空间,传递给new函数的时一个类型,不是一个值。返回值,指向这个新分配的零值的指针make的作用是为slice,map或chan初始化并返回引用(T)make函数式内建函数,函数定义:func make(Type, size IntegerType) Type第一个参数是一个类型,第二个参数是长度,返回值是一个类型make(T,args
2021-04-20 00:46:19
375
原创 select可以用于什么,常用语gorotine的完美退出
golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作
2021-04-20 00:44:46
287
原创 说说进程,线程,协程之间的区别
进程是资源的分配的调度的一个独立单元,而线程是cpu调度的基本单元同一个进程可以包括多个线程;进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束;线程共享整个进程的资源(寄存器,堆栈,上下文),一个进程至少包括一个线程;进程的创建调用fork,而线程的创建调用pthread_create;线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源进程是资源的分配单位线程是操作系统调度的单位进程切换需要的资源很大,效率很低线程切换需要的资源一般,效率
2021-04-20 00:42:18
284
1
原创 在go语言中,Printf(),Sprintf(),Fprintf()函数的区别用法是什么?
都是把格式好的字符串输出,只是输出的目标不一样;Printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)是和标准输出文件(stdout)关联的,Fprintf则没有这个限制Sprintf() 是把格式字符串输出到指定字符串中,所以参数比printf多一个char*,那就是目标字符串地址Fprintf() 是把格式字符串输出到指定文件设备中,所以参数比printf多一个文件指针FILE*主要用于文件操作,Fprintf()是格式化输出到一个stream,通常是到文件...
2021-04-17 01:22:22
1309
原创 切片和数组对比
数组数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列数组的长度是数组类型的一部分,所以[3]int和[4]int是两不同的数组类型数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变;数组是值传递;数组是内置(build-in)类型,是一组同类数据的集合,他是值类型,通过从0开始的下标索引访问元素值数组的长度也是其1类型的一部分,通过内置函数len(array)获取其长度在初始化后长度是固定的,无法修改其长度,当做为方法的参数传入将复制一份数组而不是引用同一指针.
2021-04-17 01:14:02
127
原创 QLineEdit信号
editingFinished 按下回车, 焦点移开returnPressed格式有效textChanged setText()也激发textEdited#include "qtguiapplication7.h"QtGuiApplication7::QtGuiApplication7(QWidget *parent) : QWidget(parent){ ui.setupUi(this); ui.lineEdit->setPlaceholderText(QString:
2021-04-17 01:05:39
524
原创 QRegExpValidator
QRegExp rx("[a-zA-Z0-9-_]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9-_]+");//邮箱QRegExpValidator *pReg = new QRegExpValidator(rx, this);ui.email->setVlidator(pReg);#include "qtguiapplication7.h"QtGuiApplication7::QtGuiApplication7(QWidget *parent) : QWidget(p
2021-04-17 01:00:37
1515
原创 计算器核心算法解析下
遍历后缀表达式中的数字和运算符当前元素为数字:进栈当前元素为运算符:1.从栈中弹出右操作数2.从栈中染出左操作数3.根据符号进行运算4.将运算结果压入栈中遍历结束栈中的唯一数字为于是暖结果while(!exo,isEmpty()){ if(当前元素为数字) 入栈; else if(当前元素为运算符) { 1.操你个栈中弹出右操作数; 2.从栈中染出左操作数; 3.根据符号进行运算; 4.将原酸结果压入栈中 } else
2021-04-17 00:57:24
110
原创 计算器核心解析算法中
中缀转后缀转换过程:当前元素e为数字:输出当前元素e为运算符1.与栈顶运算符进行优先级比较2.小于等于:将栈顶元素输出,转13.大于:将当前元素e入栈当前元素e为左括号:入栈当前元素e为右括号:1.弹出栈顶元素并输出,直至栈顶元素为左括号2.将栈顶的左括号从栈中弹出while(!exp.isEmpty()){ QString e = exp.dequeue();//排在第一位的哪个元素取出来 if(isNumber(e))//是数字 { 输出e;
2021-04-17 00:54:58
111
原创 计算器核心解析算法上
计算机如何读懂四则运算表达式?9.3+(3-0.11)中缀表达式,后缀表达式5+3----5 3 +1+2*3->1 2 3 * +9 + (3 - 1 )*5 ->9 3 1 - 5 * +中缀表达式符合人类的阅读和思维习惯后缀表达式符合计算机的运算方式解决方案1.将中缀表达式进行数字和运算符的分离将中缀表达式转换为后缀表达式t哦那个过后缀表达式计算最终结果数字和小数点【0-9或.】符号位【—+】运算符【——,-,*,/】括号【或】.
2021-04-17 00:52:01
146
原创 Qt中的字符串类
Qt中的字符串类采用unicode编码使用隐式共享技术来节省内存和不必要的数据拷贝跨平台使用,不必考虑字符串的平台兼容性QString 直接支持字符串和数字的相互转换QString 直接支持字符串的大小比较QString 直接支持不同字符编码间的相互转换QString 直接支持std::string 和std::wstring 的相互转换QString 直接支持正在表达式的应用#include <QCoreApplication>#include &.
2021-04-17 00:49:58
164
原创 形态学操作
l开操作- openl闭操作- closel形态学梯度- Morphological Gradientl顶帽 – top hatl黑帽 – black hat开操作- open先腐蚀后膨胀 可以去掉小的对象,假设对象是前景色,背景是黑色morphologyEx(src, dest, CV_MOP_BLACKHAT, kernel);- Mat src – 输入图像- Mat dest – 输出结果- int OPT – CV_MOP_OPEN/ CV_MOP_CLOS...
2021-04-17 00:45:56
102
原创 C++封装sqlite3库
#ifndef _SMART_DB_H#define _SMART_DB_H#include "sqlite3.h"#include <string>#include <iostream>#include <vector>/** function:封装的sqlite类,具备链接,查询,关闭功能* des:sql用字符串拼接方式,会有sql注入的风险*/class SmartDB{public: SmartDB(); /*.
2021-04-15 21:51:38
1154
原创 车ECU库
<?xml version="1.0" encoding="gb2312"?><AUTO> <INIT TOTAL="08"> <SYSTEM NO="00" NAME="VAR_000009"> <INIT_IO TOTAL="09" CMD="10" PROCEDURE="Diag_InitIo"> <STATE BYTES="02" NAME="BautRate" ID="01"&g.
2021-04-12 01:13:57
76
原创 关于std::function,几个行之有效的扩展小技巧
开发中,若你的项目稍微具有点扩展性和灵活性,那便少不了会用到std::function。std::function可以容纳任何形式的可调用体,比如普通函数,成员函数,Lambda 函数。因此,可以借其来实现两个重要的功能:接口分离和时间分离。接口分离指的是调用者和被调用者之间彼此分离,以降低二者的依存性。具体来说,你可以将任何可调用体保存到std::function中,可调用体不知道std::function的存在,反之亦如此。于是,可以做什么呢?将具体的处理方式等到用的时候再进行指定,调用者通
2021-04-12 00:32:27
625
原创 QT中文乱码问题
默认字符集设置文件字符集格式vs qtcreator设置字符集转换QStringLiteralcodec = QTextCodec:codecForName("UTF-8")QTextCodec::setCodecForLocale(codec)QTextCodec::availableCodecs();QString::fromLocal8Bit#include "qtguiapplication2.h"#include <QtWidgets/QApplicatio
2021-04-12 00:18:10
144
原创 膨胀与腐蚀
形态学操作(morphology operators)-膨胀图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学 形态学有四个基本操作:腐蚀、膨胀、开、闭 膨胀与腐蚀是图像处理中最常用的形态学操作手段形态学操作-膨胀跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状lgetStructuringElement(int shape, Size
2021-04-12 00:11:55
81
原创 模糊图像
模糊原理Smooth/Blur 是图像处理中最简单和常用的操作之一 使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算通常这些卷积算子计算都是线性操作,所以又叫线性滤波假设有6x6的图像像素点矩阵。卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像素值。每次移动一个像素格。归一l高斯模糊- GaussianBlur(Mat ...
2021-04-12 00:10:14
130
原创 调整图像亮度与对比度
图像变换可以看作如下: 像素变换 – 点操作 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作 Mat new_image = Mat::zeros( image.size(), image.type() ); 创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0saturate_cast<uchar>(value)确保值大小范围为0~255之间Mat.at<Vec3b>(y,x)[index]=value 给每个像素点每个通道赋值
2021-04-12 00:05:25
67
原创 TreeWiget右键添加删除复制粘贴剪切和双击展开
项目中代码#include "treewidget.h"#include "dataprocess.h"#include "addsondialog.h"#include "dialog.h"#include "setconfdialog.h"#include <QHeaderView>#include <QVector>#include <vector>#include <algorithm>#include <iostream
2021-04-10 08:09:53
766
原创 Qt表格实现模糊查询搜索过滤
项目中的源码,仅供参考#include "dtclibwidget.h"#include "dtclib.h"#include "dataprocess.h"#include <QToolTip>DtcLibWidget::DtcLibWidget(QWidget *parent) : QWidget(parent),standModel(new QStandardItemModel), filterModel(new MySortFilterProxyModel), t
2021-04-08 07:51:57
3109
原创 opencv图像混合
#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace cv;int main(void) { Mat src1, src2, dst; src1 = imread("C:/Users/Robin/Pictures/2.jpg"); src2 = imread("C:/Users/Robin/Pictures/3.jpg"); if (!src1.
2021-04-04 23:16:21
73
原创 读写图像
imread 可以指定加载为灰度或者RGB图像 Imwrite 保存图像文件,类型由扩展名决定读一个GRAY像素点的像素值(CV_8UC1) Scalar intensity = img.at<uchar>(y, x); 或者 Scalar intensity = img.at<uchar>(Point(x, y));读一个RGB像素点的像素值 Vec3f intensity = img.at<Vec3f>(y, x); float blue = intensit
2021-04-04 23:12:09
133
原创 Mat对象使用-四个要点和Mat对象创建
l输出图像的内存是自动分配的l使用OpenCV的C++接口,不需要考虑内存分配问题l赋值操作和拷贝构造函数只会复制头部分l使用clone与copyTo两cv::Mat::Mat构造函数 Mat M(2,2,CV_8UC3, Scalar(0,0,255)) 其中前两个参数分别表示行(row)跟列(column)、第三个CV_8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3,第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数目一致创建多维数
2021-04-04 23:09:14
231
原创 函数调用filter2D功能
定义掩膜:Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); filter2D( src, dst, src.depth(), kernel );其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等。#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>
2021-04-04 23:06:52
143
原创 获取图像像素指针和像素范围处理saturate_cast<
CV_Assert(myImage.depth() == CV_8U); Mat.ptr<uchar>(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。获得当前行指针const uchar* current= myImage.ptr<uchar>(row ); 获取当前像素点P(row, col)的像素值 p(row, col) =current[col]lsaturate_cast<uchar>(-100),返回 0。lsaturat
2021-04-04 23:04:50
198
原创 保存图像(cv::imwrite)
保存图像文件道指定目录路径只有8位,16位的PNG, JPG, Tiffy文件格式而且时单通道或者三通道的BGR的图像才通过这种方式保存保存PNG格式的时候可以保存透明通道的图片可以指定压缩参数#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;int main(void) { Mat src = imread("C:/Users/Robin/Pictures/test.j
2021-04-04 23:02:11
10911
原创 加载图像(cv::imread)和显示图像(cv::namedWindos与cv::imshow)
第一个参数表示图像文件名称imread第二个参数,表示加载的图像时什么类型,支持常见的三个参数值IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来namedWindow功能时创建一个OpenCv窗口,它时由opencv自动创建与释放,你无需销毁他常见的用法namedWindow("WindosTitle ",WIN..
2021-04-03 22:24:54
819
原创 配置
视图----其他---属性管理器debug x64属性vc++目录包含目录include /include opencv2/include opencv库目录 build x64 vc14 lib链接器 输入 附加依赖项opencv_world346d.lib#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;int main(void) { Mat sr.
2021-04-03 22:23:07
58
原创 Qt中的消息处理
Qt消息模型Qt封装了具体操作系统的消息机制Qt遵循经典的GUI消息驱动事件模型Qt中如何表示用户消息?Qt中如何映射用户消息到消息处理函数?Qt中消息映射需要遵循什么规则?信号与槽Qt中定义了与系统消息相关的概念信号(Signal)由操作系统产生的消息槽(Slot)程序中的消息处理函数连接(Connect)将系统消息绑定到消息处理函数Qt的核心-QObject::connect函数bool connect(const ...
2021-04-03 22:18:17
121
原创 计算器界面代码重构
重构以改善代码质量为目的代码重写使其软件的设计和架构更加合理提高软件的扩展性和代码实现与代码重构不同#ifndef QCALCULATORUI_H#define QCALCULATORUI_H#include <QWidget>#include <QApplication>#include <QLineEdit>#include <QPushButton>#include <QDebug>class QCal
2021-04-03 22:16:00
237
1
原创 计算器
QLineEdit用于接受用户输入QLineEdit能够获取用户输入的字符串QLineEdit是功能性组件,需要父组件作为容器QLineEdit能够在父组件中进行定位QWidget w; //生成QWidget对象, 顶级组件QLineEdit le(&w); //生成QLineEdit对象, 其父组建为QWidgetle.setAlignment(Qt::AlignRight); //设置显示的字符串向右边对齐le.move(10, 10);le.resize(24
2021-04-03 22:12:59
53
原创 Qt中坐标系统
GUI操作系统都有特定的坐标系统图形界面程序在坐标系统中进行窗口和部件的定位定位类型顶级窗口部件的定位窗口内部见的定位窗口部件的大小设置Qt使用统一的坐标系统定位窗口部件的位置和大小Qt部件类提供成员函数在坐标系统中进行定位QWidget类提供了窗口部件所需的坐标系统成员函数坐标系统相关函数QWidget类中的坐标系统成员函数x()y()width()height()geometry()集合信息不包含边框x(), y(), width().
2021-04-03 22:10:53
74
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人