本文共 1800 字,大约阅读时间需要 6 分钟。
video_reader.cpp
#include可能有的地方不准确,请大家指正!#include #include #include #include #include #include #include #include #include int main(int argc, const char* argv[]){ if (argc != 2) return -1; const std::string fname(argv[1]);//文件名 cv::namedWindow("CPU", cv::WINDOW_NORMAL);//创建显示CPU读入图像的窗口 cv::namedWindow("GPU", cv::WINDOW_OPENGL);//创建显示GPU读入图像的窗口 cv::gpu::setGlDevice();//设置CUDA并且为当前使用OpenGL的进程初始化,参数默认为0 cv::Mat frame;//用于存储CPU读入图像的数组 cv::VideoCapture reader(fname);//实例化一个 用CPU从文件组读入视频的类 cv::gpu::GpuMat d_frame;//用于存储GPU读入图像的数组 cv::gpu::VideoReader_GPU d_reader(fname);//实例化一个 用GPU从文件组读入视频的类 d_reader.dumpFormat(std::cout);//输出视频帧信息 cv::TickMeter tm; std::vector cpu_times; std::vector gpu_times; for (;;) { tm.reset(); tm.start();//计算CPU读入一帧的时间 if (!reader.read(frame)) break; tm.stop(); cpu_times.push_back(tm.getTimeMilli()); tm.reset(); tm.start();//计算GPU读入一帧的时间 if (!d_reader.read(d_frame)) break; tm.stop(); gpu_times.push_back(tm.getTimeMilli()); cv::imshow("CPU", frame);//显示CPU读入的视频 cv::imshow("GPU", d_frame);//显示GPU读入的视频 if (cv::waitKey(3) > 0)//如果等待时间大于3,就终止读入视频 break; } if (!cpu_times.empty() && !gpu_times.empty())//如果时间不为空 { std::cout << std::endl << "Results:" << std::endl; std::sort(cpu_times.begin(), cpu_times.end());//排序 std::sort(gpu_times.begin(), gpu_times.end()); double cpu_avg = std::accumulate(cpu_times.begin(), cpu_times.end(), 0.0) / cpu_times.size();//求CPU读入一帧的平均时间 double gpu_avg = std::accumulate(gpu_times.begin(), gpu_times.end(), 0.0) / gpu_times.size();//求GPU读入一帧的平均时间 std::cout << "CPU : Avg : " << cpu_avg << " ms FPS : " << 1000.0 / cpu_avg << std::endl;//输出平均时间和帧频 std::cout << "GPU : Avg : " << gpu_avg << " ms FPS : " << 1000.0 / gpu_avg << std::endl; } return 0;}
转载地址:http://tvnii.baihongyu.com/