自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小惊大怪的博客

现在付出,以后收获

  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 VTM代码学习 01一 DATA STRUCTURES

相较于上一代参考软件HM,z-index 类等函数叠加顺序上不优,TcomdataCU这个数据模型太模糊。等等细节问题。加入了面向对象设计程序,取消了z-index的使用,消除CTU->z-index的信号寻址。TComDataCU存储编码信息, 可能代表一个CU或CTU(包含多个CU),图像位置到编码信息的映射TComTU不包含实际数据,而是包装TComDataCUTComPicYuv存储视频信号...

2022-04-25 19:45:38 1568

原创 VVC块划分介绍

partitioning1 帧分割为CTU在VVC编码中,对于具有三个样本阵列的图片,CTU由一个N×N的luma样本块和两个相应的色度样本块组成。2 帧分割为 子图,条,块一帧图片被分成一个或多个tile行和一个或多个tile列。tile是覆盖图片矩形区域的CTU序列。slice由整数个完整的tile或图片tile内连续完整的CTU行组成。支持两种slice模式,即光栅扫描(raster-scan)slice模式和矩形(rectangular )slice模式。光栅扫描(raster-scan

2022-04-25 11:26:37 2012

原创 网络建设过程笔记

1.os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件、目录打交道,这时就离不了os模块,本节内容将对os模块提供的函数进行详细的解读https://blog.csdn.net/menghuanshen/article/details/790559942.torch.nn.Module所有神经网络的基类,模型类继承这个基类3.def init(self)和def init(self, 参数1,参数

2022-03-10 14:50:10 203

原创 Dockerfile是什么

Dockerfile的使用dockerfile是用来定制镜像的,dockerfile是一个文本文件,其中包含的了一条条指令,每条指令构建一层,对镜像的每一层修改、安装构建、操作。详情可点链接:[https://developer.aliyun.com/article/714454]https://developer.aliyun.com/article/714454...

2021-11-18 18:04:33 2191

原创 CUDA到底是什么

英伟达 CUDACUDA是 NVIDIA 开发的并行计算平台和编程模型,用于图形处理单元 (GPU) 上的通用计算。借助 CUDA,开发人员可以利用 GPU 的强大功能显着加快计算应用程序的速度。NVIDIA 的 CUDA 工具包提供了开发 GPU 加速应用程序所需的一切。CUDA 工具包包括 GPU 加速库、编译器、开发工具和 CUDA 运行时。CUDA 容器镜像为 CUDA 支持的平台和架构提供了一个易于使用的分发版...

2021-11-17 19:38:45 5661

原创 PyTorch详细入门-实现MNIST手写识别网络

实现MNIST手写识别网络若想复现一个神经网络,MNIST手写识别可以算是简单的入门了,今天就详细的介绍基于pytorch框架的网络实现:首先,构建的网络是卷积神经网络;CNN的几个概念,分别是:卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。激活函数(Rect

2021-08-26 16:58:09 429

原创 windows上传代码文件到GitHub

windows上传代码文件到GitHub最开始通过提的博客中方法总是出现:请求被中止: 未能创建 SSL/TLS 安全通道,这种错误,现在找到一个办法解决了问题:1.下载Git, 下载链接.2.安装通过这个链接进行安装,一路同意就OKhttps://blog.csdn.net/mukes/article/details/115693833.安装好之后,鼠标点击右键就可以看到GIT BASH HERE了首先创建一个新文件夹,在这个文件夹内进行操作,先做一下准备工作:先确定是否有生成ssh秘钥C:

2021-08-16 09:54:39 502

原创 HEVC帧间预测流程(一)——总的步骤流程

HEVC帧间预测总的步骤帧间预测是为了减少时间冗余信息,利用图像帧与图像帧之间的相关性,也就是 视频时间域的相关性,通过已编码像素预测当前块的像素,有助于去除视频时域冗余,大大压缩数据。帧间预测编码比帧内预测编码压缩比要大得多。帧间预测主要的工作是运动估计与运动补偿。所谓运动估计简单说就是在参考帧中找到当前块的最优参考块,用运动向量(MV)表示参考块与当前块的位置关系。所谓运动补偿简单说就是对参考块与当前块求差值得到残差用于传输。不管是所谓的普通帧间预测还是merge帧间预测,总的步骤:①建立MVP

2021-06-21 21:12:46 694

原创 leetcode26-删除有序数组中的重复项

删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。在这里给出c++的两种方法:第一种双指针算法,通过一快一慢,两个下标值对之前的数组进行整理;方法二是简单的穷举法,因为是有序数组,所以进行与之后的值进行比较,刷新原数组。值得注意的是:输入数组是以「引用」&方式传递的,这意味着在函数里修改输入数组对于调用者是可见的

2021-06-06 11:56:02 152

原创 leetcode21-合并有序链表

21-合并有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。运用比较头疼的递归算法,比较两个链表的大小,要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。class Solution21{public: Node* mergeTwoLists(Node* l1, Node* l2) { if (l1 == nullptr) { return l2; }

2021-06-06 11:27:39 81

原创 leetcode-20有效括号

有效括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。解题思路:因为成对的括号,存在先进左括号,后出右括号的规则,所以遇到左括号就进栈,遇到右括号就出栈并且校验,直到最后都抵消为空整体代码如下:class Solution20 {public: bool isValid(string s) { int n = s.size(); if (n %

2021-06-06 11:15:13 141

原创 leetcode35-搜索插入位置(二分法经典题目)

leetcode35-搜索插入位置二分法经典题目,可以作为学习二分法来学习给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2解法思路:本题让我们查找一个元素target的位置,首先想到的就是二分法查找。只需再加一个条件在没有值的情况下仍能找到对应位置。设变量ans作为target的下标,作为输出,然后int mid = ((right - l

2021-06-05 21:35:58 98

转载 c++计算数组长度/数组作为参数传递

c++计算数组长度/数组作为参数传递 (1)借助sizeof()函数 :#include<stdio.h>int main(){ // 定义一个整型数组, 并进行初始化赋值9个数据 :  int arr[] = {1,2,3,4,5,6,7,8,9}; int length = 0; // 计算数组中数据长度 : // 所有数据的字节数除以一个数据的字节数即为数据的个数 :  length = sizeof(arr) / size

2021-06-05 21:03:27 1988 1

原创 leetcode13 罗马转整型 c++

leetcode13 罗马转整型字符 数值I 1V 5X 10L 50C 100D 500M 1000罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但

2021-05-25 12:47:49 79

原创 leetcode9 回文数 c++

leetcode9 回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是例输入:-121输出:false解法思路:用数学方法,通过求余得数的方法,将输入的数,进行反转,用反转后的数与原来的数进行比较,返回bool值。(在这里遇到问题,leetcode中不允许y定义为整型,但在vs2013中就可以,如遇到的话可以把int换为double)全部详细代码如

2021-05-25 12:30:15 261

原创 leetcode7 整数反转 c++

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。例:输入:-123输出:-321解法思路:通过数学方法,原数对10求余可得到末尾数字,然后除10,直接减少数的位数,将最后一位去掉,进行遍历,对得到数字重新计算来得到反转数字。完整代码如下:class Solution7 {public: int reverse(int x) { int rev

2021-05-25 11:59:35 149

原创 leetcode1 完整实现两数之和 c++

leetcode1两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。class Solutiontwosum {public:

2021-05-25 11:36:34 378

原创 HM学习——xCompressCU函数

#if AMP_ENC_SPEEDUPVoid TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, const UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug_), PartSize eParentPartSize )#elseVoid TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*&a.

2021-05-13 09:52:06 875

原创 MP4文件转YUV格式

mp4文件变为YUV文件用ffmpeg一行代码解决。例如:诺爹的一个MP4视频,现把它变为一个YUV序列。打开命令提示符cmd,输入ffmpeg -i soccer.mp4 soccer_320_568.yuv确保MP4文件在路径中。得到了YUV序列文件。...

2021-05-07 16:00:17 3058

原创 QG—QP控制机制

在HEVC视频编码中,QP是非常重要的参数,他直接影响视频的比特率,通过灵活控制量化参数可以,使编码速率尽量接近给定速率。同一个QG内的非零系数的CU共享一个QP,同时,不同的QG可以使用不同的QP。QG是将一幅(帧)图像划分为等大的N * N的正方形像素块,大小由图像参数集(pps)决定。一幅图像中由于QG是固定大小,而CU是自适应划分而来,所以有可能一个CU包含多个QG,也可能一个QG包括多个CU。例如图片,该图像定义QG大小为32*32。图中虚线为 CU划分。细线为QG划分。在H264中,sli

2021-05-04 11:30:29 1051

原创 HEVC模式决策快速策略

快速的策略①提前终止策略(Early_CU)如果当前CU的最优编码模式是MODE_SKIP模式,那么终止该CU后续四叉树划分和模式判决②早期跳出模式(Early_Skip)如果CU的PU划分模式是PART_2Nx2N,预测模式是MODE_INTER,运动矢量差MVD是(0,0),且预测残差不包含非零变换系数(就是变换系数全是0),就判定当前模式是最优模式,跳过剩余的模式,直接进行下一步的四叉树分割及子CU模式判决。③快速CBF策略(CBF_Fast)如果CU的预测模式是MODE_INTER,其对

2021-05-03 21:41:48 630

原创 每一步详细介绍—在HM中进行CU PU TU划分以及PU最佳预测模式选择

CU PU TU划分以及PU最佳预测模式选择在HM对CU进行划分(CU模式判别)、PU模式选择(划分)、以及PU预测模式划分的过程总算有点理解,现对整个过程进行详细介绍。HM进行块划分和模式选择主要的工作是:一、分层递归所有CU划分模式。二、对每一个CU遍历所有PU(划分)模式,选出最优划分模式,与此同时也完成了最优TU模式的选择。三、对每一个PU遍历所有的预测模式(intra,inter等,对帧内帧间都遍历一遍比较选出最优模式,记录预测数据。选择最优预测模式。划分过程中并不是按一二三的顺序进行

2021-04-27 14:13:09 3343 2

原创 c++中的 . 与 ->

c++中的 . 与 ->我们知道 . 与 -> 都是用来访问类中的成员的。但是我们知道他们的共同点,不同点也是我们想要问的,以下就是他们的不同点。b.a 可以读做“b的a”。用于当 b 是对象 a 的成员,需要访问这个成员 b 的时候会使用a.b这样的方式。p->a 读作“指向A类的b”其实是 (*p).a 这种访问方式的简写,即当 p 是指向对象的指针时就需要这种方式来访问这个 a ;#include<iostream>class A{public:

2021-04-25 16:42:49 543

转载 HM源码命名规则

HM源码命名规则最近在看HM源码,由于各函数和变量的命名规则实在不太简洁易理解,所以记录如下命名规则供大家参考。 在刚开始看HM的时候,对着7个工程,可能有人会感到困惑,该从哪里看起呢?当然了,对于已经有一定代码量积累的人或者之前研究过H.264代码如JM的人来说,从何入手应该不成问题。但我写这篇出来,一方面是自己做个总结,备忘,另一方面也是希望能够帮助刚刚入手HM的朋友。好了,不多废话,还是进入正题吧。   对于一个完整的HM解决方案来说,总共包含

2021-04-25 10:38:13 206

原创 HM代码学习02——TAppEncTop::encode()

TAppEncTop::encode()创建内部类初始化内部变量直到输入YUV文件结束,调用TEncTop类中的编码函数删除分配的缓冲区摧毁内部阶级Void TAppEncTop::encode(){ fstream bitstreamFile(m_bitstreamFileName.c_str(), fstream::binary | fstream::out); if (!bitstreamFile) { fprintf(stderr, "\nfailed to ope

2021-04-20 16:41:57 385

原创 HM代码学习01——main()

main()函数对于HM编码器TAppEncoder是对视频编码的项目,而项目一开始首先从主函数main()进入代码,我们首先学习main()函数,main()函数主要进行的工作是定义TAppEncTop类的cTAppEncTop对象、打印HM版本信息、创建类cTAppEncTop、解析cfg文件,、打印宏块信息、对整个编码过程计时、调用对象cTAppEncTop中的encode函数 进行下一步的编码、显示编码时间,销毁编码器的类这些工作。源码的个人注释如下:#include <time.h&g

2021-04-18 15:28:50 530

转载 if前面加个#是什么意思?c++中#if与if的比较

#if 与 if条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如 #define A 0 //把A定义为0 #if (A...

2021-04-17 11:50:03 4594

转载 c++中的**p

*p和**p的区别 一、指针级别不同 *p是一级指针。 **p是二级指针。 二、表示的含义不同 *p表示p所指向的地址里面存放的是一个int类型的值 。 **p表示p所指向的地址里面存放的是一个指向int类型的指针。 三、指向的内容不同 *p=a指针p将指向a上的内容。 **p=a将变量a的地址 通过指针p 赋值到...

2021-04-15 11:51:12 11908 1

转载 c++指针*与引用&

原文:https://blog.csdn.net/weixin_42878758/article/details/82865314 C/C++ *和& 详解 C/C++中 * 的用法 1>最简单的乘法: a*b; 2>可以注释: /**/ 3>指针:(最重要) 指针是指向变量的地址 简单的例

2021-04-15 11:45:40 65

原创 HM编码学习——数据处理与批处理

这里写自定义目录标题HM软件编码流程批处理功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入HM软件编码流程之前一顿时间对HM进行了编码输出了二进制码流文件和YUV文件,但是对于编码得到的相关数据没有很好的直观感受。并且急需通过批

2021-04-12 14:26:15 671

转载 HM源码必看概念整理

最近看HM源码非常头疼,这代码写出来是给人看的,不是为了不让人看的哈哈哈哈哈,看到博文对各个类和数据结构整理的很详细转载一下Mark一下。原址:https://blog.csdn.net/NB_vol_1/article/details/51135584     TcomPic 是图片类,它包含TComPicSym(图像符号类)和TComPicYuv(yuv数据类:包括原始数据,预测数据、残差数据)    

2021-03-31 10:51:15 793

转载 HM编码单元CU编码基础及代码解释

CU编码      注意事项 1、帧间预测分为两种:merge模式(skip模式是一种特殊的merge模式)和AMVP模式(即普通的帧间预测模式); 2、merge模式只支持2Nx2N的划分。 3、 帧内预测只支持2Nx2N和NxN的划分模式     CU编码流程 一、先确定iMinQP和iMaxQP     这两个值可以从码率控制对象中得到,也可以自定...

2021-03-29 14:18:59 702

转载 HM代码学习①批处理与生成测试结果

测试结果的保存、批处理及数据处理 一.测试结果的单一保存 这些天跑了一些程序,发现按照原始状态的话,得到的结果没法保存。刚开始只是跑着玩玩,认为只要把结果截图下来,然后进行处理。后来发现,这样的做法对测试一两个序列还是可以接受的,但当自已在测试多个序列时,工作量实在太大了,浪费了好多时间。于是,就想怎样使测试结果自已保存起来?网上搜了一下,发现了一个函数“freopen”,可以简单的实现测试结果的保存。即,将测试输出直接转化为TXT,保存在工程目录下(与生...

2021-03-25 13:27:33 399

原创 通俗易懂——HEVC帧间预测简要知识点总结

帧间预测预测编码分为帧内编码和帧间编码;本文主要简单介绍帧间编码的原理流程1.帧间预测编码原理帧间预测是利用图像帧与图像帧之间的相关性,也就是 视频时间域的相关性,通过已编码像素预测当前块的像素,有助于去除视频时域冗余,大大压缩数据。帧间预测编码比帧内预测编码压缩比要大得多。帧间预测主要的工作是运动估计与运动补偿。2.帧间预测编码关键技术1)运动估计2)MV预测3)多参考图像及加权预测运动估计MV预测技术加权预测...

2021-03-24 16:35:52 3397

原创 HEVC NAL层基础知识

NALUVCL层是对核心算法引擎、块、宏块及片的语法级别的定义,最终输出压缩编码后的数据 SODB。VCL数据在传输或存储之前,先被映射或封装进NAL单元中。NAL层将SODB打包成RBSP然后加上NAL头,组成一个NALU(NAL单元)。NAL层定义片级以上的语法级别(如序列参数集和图像参数集,针对网络传输),同时支持以下功能:独立片解码,起始码唯一保证,SEI以及流格式编码数据传送。每个NAL单元是一个一定字语法元素的可变长字节字符串,包括一个字节的头信息(用来表示数据类型),以及若干个整数字节的原

2021-03-16 12:06:58 527

转载 通过AVC来理解HM入门基础知识

1.宏块(Macro Block):是H.264编码的基本单位,一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为16x16个像素。 宏块分为I、P、B宏块: I宏块只能利用当前片中已解码的像素作为参考进行帧内预测; P宏块可以利用前面已解码的图像作为参考图像进行帧内预测; B宏块则是利用前后向的参考图形进行帧内预测 2.片(Slice):一帧视频图像可...

2021-03-11 21:08:44 423

转载 HEVC编码结构简要总结

HEVC编码结构简要总结感谢原创转载自 从数学游到计算机的咸鱼:https://blog.csdn.net/qq_21506301/article/details/107289576?spm=1001.2014.3001.5501 第1章 编码结构 1.1 视频编码标准简介 视

2021-03-10 21:54:22 3295 3

原创 HEVC学习笔记一

HEVC学习笔记今天试着在学习HEVC的过程中从小白的起点记录些笔记,或许给我们这些找不到太直接的资源的小白们互相学习互相交流

2021-03-10 16:23:34 183

HM码流信息提取工具,可以批量提取编码信息

HM码流信息提取工具,可以批量提取编码信息

2021-04-12

视频编码测试序列.zip

对于视频编码新手找到几个视频序列用于测试

2021-03-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除