我想仅在视频流应用程序(服务器)中生成I帧的边缘映射。下面是在ffmpeg中生成帧类型的代码。
AVFrame *frame;
pictType = av_get_picture_type_char(frame->pict_type);
在这一步之后,我不知道如何处理框架(使用opencv c ++)来获得它的边缘图。
由于我是ffmpeg的初学者,我希望你能给我一个简单的例子来理解这个问题。
答案 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);
这将为您提供表示边缘的二进制映射。
您需要两个阈值,具体取决于您的图像。第一次尝试时,只需尝试一些值来感受它。稍后,您可以研究估算这些阈值的良好值的技术。