Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.11 KB | None | 0 0
  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/highgui/highgui.hpp> //openCV - библиотеки для работы с переферийными устройствами (веб-камера)
  3. #include <iostream>
  4.  
  5. using namespace cv;
  6. using namespace std;
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.     struct timespec start, end, temp1, temp2,temp3,temp4,temp5,temp6;//Структуры для сохранения определенного времени
  11.  
  12.     clock_gettime(CLOCK_MONOTONIC_RAW, &start); //засекаем время работы всей программы
  13.  
  14.     VideoCapture cap(0); //'открываем поток' с камерой по умолчанию - веб-камера
  15.  
  16.  
  17.     if (!cap.isOpened())
  18.     {
  19.  
  20.         cout << "Cannot open the video camera" << endl;
  21.         cin.get(); // функция для вывода данных с потока,аналог get,но нужна,чтобы консоль не закрывалаась сразу после завершения работы программы
  22.         return -1;
  23.     }
  24.  
  25.     string window_name = "My Camera Feed"; //создаем название окна
  26.     namedWindow(window_name); //Создаем окно с этим названием
  27.  
  28.     double time_rendering = 0;//
  29.     double time_working = 0;//время работы программы от start до end
  30.     unsigned long count = 0;//обнуляем число кадров
  31.     double time_input=0;//read cadr
  32.     double time_output=0;
  33.    
  34.  
  35.     while (true) //бесконечный цикл
  36.     {
  37.  
  38.  
  39.                 Mat frame; // картинка-матрица множество пикселей двумерный массив цвет-каждый зеленый синий 1 пиксель-цвет r=0 до 255=g=b чем больше число,тем выше насыщенность
  40.         clock_gettime(CLOCK_MONOTONIC_RAW, &temp3);
  41.         if (!cap.read(frame))//считывание кадра, если мы не можем получить кадр-ошибка
  42.         {
  43.             cout << "Video camera is disconnected" << endl;
  44.             cin.get();
  45.             break;
  46.         }
  47.         clock_gettime(CLOCK_MONOTONIC_RAW, &temp4);
  48.         time_input += (temp4.tv_sec - temp3.tv_sec + 0.000000001 * (temp4.tv_nsec - temp3.tv_nsec));//время на обработку изображения
  49.         clock_gettime(CLOCK_MONOTONIC_RAW, &temp1);
  50.         //время, затрачиваемое процессором на обработку
  51.         //( преобразование
  52.  
  53.         for (int i = 0; i < frame.rows; i++)//длина изображения - высота штука для изменения цвета 0-red,1-green,2-blue
  54.             for (int j = 0; j < frame.cols; j++)//ширина изображения
  55.                 if (frame.at<Vec3b>(i, j)[0] < frame.at<Vec3b>(i, j)[1] - 10 && //обращаемся к ij пикселю и сравниваем его с red
  56.                     frame.at<Vec3b>(i, j)[2] < frame.at<Vec3b>(i, j)[1] - 10 &&//бращаемся к ij пикселю и сравниваем его с blue
  57.                     frame.at<Vec3b>(i, j)[1] > 64)// green>64
  58.                 {
  59.                     frame.at<Vec3b>(i, j)[0] = 255;// blue
  60.                     frame.at<Vec3b>(i, j)[1] = 0;//green
  61.                     frame.at<Vec3b>(i, j)[2] = 0;//устанавливаем значения цвета, цвет состоит из 3 цветов = р г б-red
  62.                 }
  63.         clock_gettime(CLOCK_MONOTONIC_RAW, &temp2);
  64.         time_rendering += (temp2.tv_sec - temp1.tv_sec + 0.000000001 * (temp2.tv_nsec - temp1.tv_nsec));//время на обработку изображения
  65.         clock_gettime(CLOCK_MONOTONIC_RAW, &temp5);
  66.         imshow(window_name, frame); //показываем изображение в ранее созданное окно
  67.         clock_gettime(CLOCK_MONOTONIC_RAW, &temp6);
  68.         time_output += (temp6.tv_sec - temp5.tv_sec + 0.000000001 * (temp6.tv_nsec - temp5.tv_nsec));//время на обработку изображения
  69.  
  70.         count++; //количество кадров увеличили
  71.  
  72.  
  73.         if (waitKey(10) == 27)//ждем нажатия кнопки '27'-escape по таблице аски выход из цикла,конец считывания
  74.         {
  75.             cout << "Stoppig the video" << endl;
  76.             break;
  77.         }
  78.     }
  79.  
  80.     clock_gettime(CLOCK_MONOTONIC_RAW, &end);
  81.     time_working = (end.tv_sec - start.tv_sec + 0.000000001 * (end.tv_nsec - start.tv_nsec));
  82.  
  83.     cout << "fps: " << (count / time_working) << endl; //количесво кадров в секунду = кол-во кадров / время работы программы от start до end
  84.     cout << "rendering time: " <<  (time_rendering / time_working * 100) << "%" << endl;// время на обработку изображения = time_rendering
  85.     cout << "time_input:  " << (time_input / time_working*100 )<< "%"<<endl; //
  86.    cout << "time_output: " <<(time_output/time_working*100)<<"%"<<endl;//
  87.  
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement