Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp> //openCV - библиотеки для работы с переферийными устройствами (веб-камера)
- #include <iostream>
- using namespace cv;
- using namespace std;
- int main(int argc, char *argv[])
- {
- struct timespec start, end, temp1, temp2,temp3,temp4,temp5,temp6;//Структуры для сохранения определенного времени
- clock_gettime(CLOCK_MONOTONIC_RAW, &start); //засекаем время работы всей программы
- VideoCapture cap(0); //'открываем поток' с камерой по умолчанию - веб-камера
- if (!cap.isOpened())
- {
- cout << «Error. Can not open the camera" << endl;
- cin.get(); // функция для вывода данных с потока, аналог get,но нужна,чтобы консоль не закрывалаась сразу после завершения работы программы
- return -1;
- }
- string window_name = «My window»; //создаем название окна
- namedWindow(window_name); //Создаем окно с этим названием
- double time_rendering = 0;//обнуляем время
- double time_working = 0;//время работы программы от start до end
- unsigned long count = 0;//обнуляем число кадров
- double time_input=0;//для чтения кадров
- double time_output=0;//для вывода кадров
- while (true) //бесконечный цикл
- {
- Mat frame; // картинка-матрица множество пикселей двумерный массив цвет-каждый зеленый синий 1 пиксель-цвет r=0 до 255=g=b чем больше число,тем выше насыщенность
- clock_gettime(CLOCK_MONOTONIC_RAW, &temp3);
- if (!cap.read(frame))//считывание кадра, если мы не можем получить кадр-ошибка
- {
- cout << «Error. Video camera is disconnected" << endl;
- cin.get();
- break;
- }
- clock_gettime(CLOCK_MONOTONIC_RAW, &temp4);
- time_input += (temp4.tv_sec - temp3.tv_sec + 0.000000001 * (temp4.tv_nsec - temp3.tv_nsec)); clock_gettime(CLOCK_MONOTONIC_RAW, &temp1);
- for (int i = 0; i < frame.rows; i++)//длина изображения - высота штука для изменения цвета 0-red,1-green,2-blue
- for (int j = 0; j < frame.cols; j++)//ширина изображения
- if (frame.at<Vec3b>(i, j)[0] < frame.at<Vec3b>(i, j)[1] - 10 && //обращаемся к ij пикселю и сравниваем его с red
- frame.at<Vec3b>(i, j)[2] < frame.at<Vec3b>(i, j)[1] - 10 &&//бращаемся к ij пикселю и сравниваем его с blue
- frame.at<Vec3b>(i, j)[1] > 64)// green>64
- {
- frame.at<Vec3b>(i, j)[0] = 242;// blue
- frame.at<Vec3b>(i, j)[1] = 78;//green
- frame.at<Vec3b>(i, j)[2] = 100;//устанавливаем значения цвета, цвет состоит из 3 цветов, порядок цветов меняется }
- clock_gettime(CLOCK_MONOTONIC_RAW, &temp2);
- time_rendering += (temp2.tv_sec - temp1.tv_sec + 0.000000001 * (temp2.tv_nsec - temp1.tv_nsec));//время на обработку изображения
- clock_gettime(CLOCK_MONOTONIC_RAW, &temp5);
- imshow(window_name, frame); //показываем изображение в ранее созданное окно
- clock_gettime(CLOCK_MONOTONIC_RAW, &temp6);
- time_output += (temp6.tv_sec - temp5.tv_sec + 0.000000001 * (temp6.tv_nsec - temp5.tv_nsec));//время на обработку изображения
- count++; //количество кадров увеличили
- if (waitKey(10) == 27)//ждем нажатия кнопки '27'-escape по таблице аски выход из цикла,конец считывания
- {
- cout << «Stop" << endl;
- break;
- }
- }
- clock_gettime(CLOCK_MONOTONIC_RAW, &end);
- time_working = (end.tv_sec - start.tv_sec + 0.000000001 * (end.tv_nsec - start.tv_nsec));
- cout << "fps: " << (count / time_working) << endl; //количесво кадров в секунду = кол-во кадров / время работы программы от start до end
- cout << "rendering time: " << (time_rendering / time_working * 100) << "%" << endl;// время на обработку изображения = time_rendering
- cout << "time_input: " << (time_input / time_working*100 )<< "%"<<endl; //
- cout << "time_output: " <<(time_output/time_working*100)<<"%"<<endl;//
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement