在何处更改参考代码以从HEVC编码视频中提取运动矢量 这个问题已经被问过几次了,但是我认为我的C++技能太差了,无法真正地理解答案。我需要的是一种方法,以HEVC编码视频开始,以包含所有运动矢量的CSV结束。到目前为止,我已经编译并运行了参考解码器,似乎一切正常。我不确定这是否重要,但我对运动矢量感兴趣,因为它是分析视频中运动的一种方便方法。我的计划首先是平均每一帧中的MVs,得到一个表示该帧中平均移动量的值

在何处更改参考代码以从HEVC编码视频中提取运动矢量 这个问题已经被问过几次了,但是我认为我的C++技能太差了,无法真正地理解答案。我需要的是一种方法,以HEVC编码视频开始,以包含所有运动矢量的CSV结束。到目前为止,我已经编译并运行了参考解码器,似乎一切正常。我不确定这是否重要,但我对运动矢量感兴趣,因为它是分析视频中运动的一种方便方法。我的计划首先是平均每一帧中的MVs,得到一个表示该帧中平均移动量的值,c++,hevc,C++,Hevc,讨论告诉了我需要与之交互以获得MVs的TComDataCU类方法,并讨论了如何迭代CTU。但我还是不太明白以下几点: 1) 这些MV方法返回什么信息?以什么格式返回?根据我有限的知识,我假设将有类似于7个与MV相关联的值:帧编号、标识该帧中宏块的索引、宏块的大小、宏块的x坐标(可能是左上角?),宏块的y坐标、向量的x坐标,和向量的y坐标 2) 我需要在代码中的什么位置放置保存数据的新语句?我原以为TComDataCU.cpp中一定有这样一个地方,我可以在其中放几行字,将我想要的数据打印到一个文件

讨论告诉了我需要与之交互以获得MVs的TComDataCU类方法,并讨论了如何迭代CTU。但我还是不太明白以下几点:

1) 这些MV方法返回什么信息?以什么格式返回?根据我有限的知识,我假设将有类似于7个与MV相关联的值:帧编号、标识该帧中宏块的索引、宏块的大小、宏块的x坐标(可能是左上角?),宏块的y坐标、向量的x坐标,和向量的y坐标

2) 我需要在代码中的什么位置放置保存数据的新语句?我原以为TComDataCU.cpp中一定有这样一个地方,我可以在其中放几行字,将我想要的数据打印到一个文件中,但我对实际确定的值以及它们是什么感到困惑。变量声明如下所示:

//创建运动矢量场
m_pCtuAboveLeft=NULL;
m_pCtuAboveRight=NULL;
m_pCtuAbove=NULL;

m_pCtuLeft=NULLTEncSlice.cpp中,您可以访问循环中的每个CTU

for( UInt ctuTsAddr = startCtuTsAddr; ctuTsAddr < boundingCtuTsAddr; ++ctuTsAddr )
将返回CTU的运动矢量场。你可以在那个物体上提取CTU的MV。 比如说,

TComMvField->getMv(g_auiRasterToZscan[y * 16 + x])->getHor() 
返回特定4x4块MV的水平元素

您可以在
m_pcCuEncoder->compressCtu(pCtu)
之后保存这些数据,因为compressCtu确定了CTU的所有数据,例如CU分区和运动估计等

我希望这些信息能帮助你和其他人

TComMvField->getMv(g_auiRasterToZscan[y * 16 + x])->getHor()