我需要知道如何旋转图像,yuv420p格式为90度。将其转换为rgb,旋转并再次重新转换为yuv的选项是不可行的。即使算法也会有所帮助。
此致 Anirudh。
答案 0 :(得分:1)
我认为它不是planar YUV,如果它已经很容易(跳过第一步和最后一步)。你的意思是YUV 4:2:0平面,但后来我不明白为什么你有困难。
Y
,U
,V
平面。然后,每个块的“颜色”(U
,V
)信息应保持不变。如果你的图像尺寸是4的倍数,这总是可以正常工作。如果不是,那就小心......
答案 1 :(得分:1)
如果图像是yuv420平面,则这是图像数据的编码方式。 平面意味着y部分首先是U部分,然后是V部分。
考虑图像宽度w和图像高度h。
图像的总大小为w * h * 3/2
Y部分也称为发光占据w * h。
Y部分每2x2块有一个U像素和V像素。
接下来是U部分,占据(w / 2)*(h / 2)并且从图像的开始处偏移w * h。
接下来是V部分,占据(w / 2)*(h / 2)并且放置在(w * h)+((w * h)/ 4)的偏移处。
为了将图像旋转90度,您基本上将此w * h数组复制到h * w
的数组中如上文所述,你只需要分别复制上面3个Y,U,V块中的每一个。
从Y部分开始。要复制的第一个像素位于源阵列中的(h-1)* w,将其复制到目标阵列的(0,0)。第二个像素位于(h-2)* w,依此类推......
请记住,U和V部分仅为(w / 2)*(h / 2)
接下来复制U部分。要复制的第一个像素位于源数组中的(w * h)+(((h / 2)-1)*(w / 2)),将其复制到(h * w)+(0,0)in目标数组。第二个像素是(w * h)+(((h / 2)-2)*(w / 2))等等......
最后复制V部分。要复制的第一个像素位于源数组中的((w * h)+(w * h / 4))+(((h / 2)-1)*(w / 2)),将其复制到(h目标数组中的* w)+(w * h / 4)+(0,0)。第二个像素位于((w * h)+(w * h / 4))+(((h / 2)-2)*(w / 2))等......
以这种方式获得的目标数组包含90度旋转图像。
答案 2 :(得分:0)