ffmpeg / opencv分类后如何执行边缘检测帧类型

时间:2018-01-25 13:22:13

标签: c++ opencv ffmpeg

我想仅在视频流应用程序(服务器)中生成I帧的边缘映射。下面是在ffmpeg中生成帧类型的代码。

AVFrame *frame; 
pictType = av_get_picture_type_char(frame->pict_type);

在这一步之后,我不知道如何处理框架(使用opencv c ++)来获得它的边缘图。

由于我是ffmpeg的初学者,我希望你能给我一个简单的例子来理解这个问题。

1 个答案:

答案 0 :(得分:2)

您需要做的第一件事是将AVFrame转换为cv :: Mat。为此,我建议你看一下this question

之后,您选择在OpenCV中实现的边缘检测算法并将其应用于图像。对于初学者,我建议使用Canny边缘检测,所以

cv::Mat img; //your image, converted from AVFrame
cv::Mat edges; //output image
cv::Canny(img,edges,th1,th2);

这将为您提供表示边缘的二进制映射。

您需要两个阈值,具体取决于您的图像。第一次尝试时,只需尝试一些值来感受它。稍后,您可以研究估算这些阈值的良好值的技术。