方法一: 从ffmpeg 生成bgr => cv::mat => image_t , 调用detect
1, 解码线程, 解码rtsp协议 264格式流 生成 w = 1280 h = 720 yuv420p
2, 通过 sws_scale函数将 yuv420p 缩小成 w = 1280 h = 720 AV_PIX_FMT_BGR24 格式
3, 通过opencv的IplImage 将数据传到物体检测线程
IplImage* pImg = cvCreateImage(cvSize(avctx->width, avctx->height), 8, 3);
memcpy(pImg->imageData, rgbBuf, rgbBufSize);
4, 检测线程通过调用detect函数进行检测.
std::vector<bbox_t> detect(cv::Mat mat, float thresh = 0.2, bool use_mean = false)
这个以mat为参数的detect 中有如下循环
for (int y = 0; y < h; ++y) {
for (int k = 0; k < c; ++k) {
for (int x = 0; x < w; ++x) {
im.data[k*w*h + y*w + x] = data[y*step + x*c + k] / 255.0f;
}