#include //#include #include #include #include cv::Mat dst_frame; cv::Mat src_frame; //auto start=0; using namespace std; auto end2 = std::chrono::steady_clock::now(); auto end3 = std::chrono::steady_clock::now(); auto end4 = std::chrono::steady_clock::now(); void read_cam(int width, int height, int fps) { std::string v4l2_cmd = "media-ctl -d /dev/media0 --set-v4l2 '\"m00_b_mvcam 7-003b\":0[fmt:Y8_1X8/" + std::to_string(width) + "x" + std::to_string(height) + "@1/" + std::to_string(fps) + " field:none]'"; system(v4l2_cmd.c_str()); cv::VideoCapture cap("v4l2src io-mode=dmabuf device=/dev/video0 ! video/x-raw, format=(string)GRAY8, width=(int)" + std::to_string(width) + ", height=(int)" + std::to_string(height) + " ! appsink"); if (cap.isOpened()) { src_frame = cv::Mat(height, width, CV_8UC1); cv::namedWindow("demo", cv::WINDOW_AUTOSIZE); int framesProcessed = 0; auto lastSecond = std::chrono::steady_clock::now(); while (true) { auto start = std::chrono::steady_clock::now(); // 获取处理开始时间 bool ret_val = cap.read(src_frame); auto end1 = std::chrono::steady_clock::now(); // 获取处理结束时间 if (ret_val) { cv::medianBlur(src_frame, dst_frame, 3); end2 = std::chrono::steady_clock::now(); // 获取处理结束时间 cv::imshow("demo", dst_frame); end3 = std::chrono::steady_clock::now(); // 获取处理结束时间 cv::waitKey(1); end4 = std::chrono::steady_clock::now(); // 获取处理结束时间 } else { std::cout << "camera open failed" << std::endl; break; } auto end = std::chrono::steady_clock::now(); // 获取处理结束时间 //auto duration = std::chrono::duration_cast(end - start); // 计算时间差 auto duration_read = std::chrono::duration_cast(end1 - start); // 计算读取时间 auto duration_median = std::chrono::duration_cast(end2 - end1); // 计算中值模糊时间 auto duration_display = std::chrono::duration_cast(end3 - end2); // 计算显示时间 auto duration_waitkey = std::chrono::duration_cast(end4 - end3); // 计算按键等待时间 auto total_duration = std::chrono::duration_cast(end - start); // 计算总时间 //std::cout << "Time taken for duration_read one frame: " << duration_read.count() << " milliseconds" << std::endl; // std::cout << "Time taken for processing one frame: " << total_duration.count() << " milliseconds" << std::endl; // std::cout << "Read time: " << duration_read.count() << " milliseconds" << std::endl; // std::cout << "Median blur time: " << duration_median.count() << " milliseconds" << std::endl; // std::cout << "Display time: " << duration_display.count() << " milliseconds" << std::endl; // std::cout << "WaitKey time: " << duration_waitkey.count() << " milliseconds" << std::endl; framesProcessed++; auto now = std::chrono::steady_clock::now(); auto elapsed = std::chrono::duration_cast(now - lastSecond); if (elapsed.count() >= 1000) { std::cout << "Frames processed in last second: " << framesProcessed << std::endl; framesProcessed = 0; lastSecond = now; } } } else { std::cout << "camera open failed" << std::endl; } cv::destroyAllWindows(); } int main(int argc, char** argv) { int width = 1080; int height = 1080; int fps = 30; if (argc > 1) { width = std::stoi(argv[1]); } if (argc > 2) { height = std::stoi(argv[2]); } if (argc > 3) { fps = std::stoi(argv[3]); } read_cam(width, height, fps); return 0; }