- 速度测试
“源代码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。
- 源代码3
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。