Ubuntu驱动USB采集卡(三)

“源代码1”的第22行改为:

1 double start = cv::getTickCount();

第64行改为:

1 double stop = cv::getTickCount();
2 std::cout << (stop - start) * 1000.0 / cv::getTickFrequency() << std::endl;

测试test.raw文件,每帧平均耗时44ms。

 1 #include <iostream>
 2 #include <opencv2/opencv.hpp>
 3 #include <cstdio>
 4 
 5 int main(int argc, char **argv) {
 6     FILE *fp = fopen(argv[1], "rb");
 7     if (!fp) {
 8         std::cout << "不能加载:" << argv[1] << std::endl;
 9         return 1;
10     }
11 
12     unsigned char buf[829440];
13     unsigned char val;
14     char title[10];
15     while (!feof(fp)) {
16         sprintf(title, "%ld", ftell(fp) / 829440 + 1);
17 
18         for (int i = 0; i < 829440; ++i) {
19             fscanf(fp, "%c", &val);
20             buf[i] = val;
21         }
22 
23         double start = cv::getTickCount();
24 
25         /// 720x576@25, 720x480@30
26         cv::Mat yuv(576, 720, CV_8UC3, cv::Scalar(0));
27         int row = 0;
28         int col = 0;
29         for (int i = 0; i < 829440; i = i + 4) {
30             yuv.at<cv::Vec3b>(row, col) = cv::Vec3b(buf[i + 1], buf[i], buf[i + 2]);  /// Y1, U1, V1
31             yuv.at<cv::Vec3b>(row, col + 1) = cv::Vec3b(buf[i + 3], buf[i], buf[i + 2]);  /// Y2, U2=U1, V2=V1
32 
33             col = col + 2;
34             if (col >= 720) {
35                 col = 0;
36                 row = row + 1;
37             }
38         }
39 
40         cv::Mat src;
41         cv::cvtColor(yuv, src, CV_YUV2BGR);
42 
43         cv::putText(src, title, cv::Point(0, 50), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(255, 255 ,0));
44 
45         double stop = cv::getTickCount();
46         std::cout << (stop - start) * 1000.0 / cv::getTickFrequency() << std::endl;
47 
48         cv::imshow("img", src);
49         cv::waitKey(1);
50     }
51 
52     return 0;
53 }

测试test.raw文件,每帧平均耗时17ms。