gpt4 book ai didi

opencv - 如何在没有默认YUV2RGB-> RGB2GRAY转换的情况下从H264 4:2:0视频读取Y分量

转载 作者:行者123 更新时间:2023-12-02 17:13:08 24 4
gpt4 key购买 nike

我需要快速处理灰度帧,因此只需要来自YUV 4:2:0视频的Y分量。正如我从探查器中看到的,大量时间浪费在无用的YUV-> RGB转换上。

VideoCapture::cap.set(CV_CAP_PROP_CONVERT_RGB, false) 

正如我从拆分中看到的那样,它没有任何作用
Mat ch[3]; split(frame,ch); imshow("it must be U-channel", ch[1]);

帧仍然是RGB,而不是YUV,即VideoCapture 会忽略 CV_CAP_PROP_CONVERT_RGB标志(我相信openCV用于视频解码的ffmpeg库可以理解这种标志)。

因此,请问有人知道如何从视频序列中更快地获得灰度图像吗? OpenCL方法也可以,因为我将Mat转换为oclMat以便在读取后处理此帧(包括当前无用的ocl::cvtColor(A,B,CV_RGB2GRAY))。

最佳答案

对于常规视频解码,您不需要OpenCV。可以使用ffmpeg库完成。下载并构建最新版本的ffmpeg并查看sample,在其中需要video_decode_example函数。在它的正文中,在第401行:

if (got_picture) {
printf("saving frame %3d\n", frame);
fflush(stdout);

/* the picture is allocated by the decoder. no need to free it */
snprintf(buf, sizeof(buf), outfilename, frame);
pgm_save(picture->data[0], picture->linesize[0], c->width, c->height, buf);
frame++;
}

由于ffmpeg使用Y Cb Cr颜色表示,解码帧的Y平面存储在 picture->data[0]中。将其复制到您的OpenCL内存对象,仅此而已。

关于opencv - 如何在没有默认YUV2RGB-> RGB2GRAY转换的情况下从H264 4:2:0视频读取Y分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com