OpenCV. Веб камера. Оптический поток Фарнебака.
(включается камера, в окне отображается поток видео. Через пару секунд в первом окне сохраняется текущий кадр и Открывается второе окно с потоком видео. Применяется функция вычисления оптического потока Фарнебака. В консоль выводятся значения...)
Пакет OpenCV компилировал компилятором i686-w64-mingw32-g++.exe (8.1)
https://ruvid.net/video/how-to-use-opencv-with-with-qt-mingw-on-windows-platform-ZOSu-2Oju-A.html
https://habr.com/post/318846/
CMake : (https://cmake.org/download/) или тут
file "webcam.cpp"
#include <stdio.h>
#include <windows.h>
#include <opencv2/core/core.hpp>
//#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/tracking.hpp"
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
//компилируем без флага -mwindows
// компиляция:
// cd "C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin"
// i686-w64-mingw32-g++.exe -IC:\OpenCV_sborka\opencv-2.4.13.6_release\install\include\ webcam.cpp
-L"C:\OpenCV_sborka\opencv-2.4.13.6_release\install\x86\mingw\lib" -lopencv_core2413.dll
-lopencv_highgui2413.dll -lopencv_imgproc2413.dll -lopencv_video2413.dll -o webcam2413.exe -mwindows
int main()
{
SetConsoleCP(1251); // На ввод
SetConsoleOutputCP(1251); //На вывод. в CMD шрифт - Lucida Concole
// cv::CvCapture * webcam = cv::cvCreateCameraCapture(0);
// if(!webcam){
// printf("Ошибка определени¤ камеры.");
// return 0;
// }
// namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
// //Mat img = imread("2.jpg", -1);
// IplImage* img1 = cvLoadImage("2.jpg");
// Mat img = Mat(img1);
// if (! img.data)
// {
// cout << "Cannot open image!" << endl;
// waitKey(5500);
// return -1;
// }
// imshow("image", img);
// waitKey(5500);
// получаем картинку
// IplImage* image = cvLoadImage("22.png",1);
// // окно дл¤ отображени¤ картинки
// cvNamedWindow("original",CV_WINDOW_AUTOSIZE);
// // показываем картинку
// cvShowImage("original",image);
// waitKey(5500);
cv::namedWindow("Etalon_Img", cv::WINDOW_AUTOSIZE); //отображаем Эталонный кадр
cv::VideoCapture cap;
cap.open(0);
if(!cap.isOpened()){
std::cerr << "Ошибка при открыти¤ устройства захвата." << std::endl;
cv::waitKey(5500);
return -1;
}
//cv::waitKey(5000);
cv::Mat etalon, frame, flowUmat;
//несколько секунд видео (чтобы включилась камера). �'ерем последний кадр как эталонный. int c;
for(c = 0; c < 250 ; c += 1){
cap >> etalon;
if(etalon.empty()) break;
cv::imshow("Etalon_Img", etalon);
if(cv::waitKey(33) >= 0) break;
}
cvtColor(etalon, etalon, COLOR_BGR2GRAY); //etalone преобразуется в серые оттенки
cv::namedWindow("Example3", cv::WINDOW_AUTOSIZE);
for(;;){
cap >> frame;
if(frame.empty()) break;
cv::imshow("Example3", frame);
cvtColor(frame, frame, COLOR_BGR2GRAY); // преобразуется в серые оттенки
// calculate optical flow !!! нужно крутить настройки параметров этой функции
//в include "opencv2/video/tracking.hpp" and -lopencv_vide2413.dll
calcOpticalFlowFarneback(etalon, frame, flowUmat, 0.4, 1, 4, 2, 1, 1, 0);
if( flowUmat.empty() ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
return -1;
}
int x,y;
double xx = 0,yy = 0;
//flowUmat.rows flowUmat.cols
for(x = 0; x < flowUmat.rows; x += 1)
{
for(y = 0; y < flowUmat.cols; y += 1)
{
const Point2f& fxy = flowUmat.at(x, y);
//для теста здесь суммируем все вектора
xx+= fxy.x;
yy+= fxy.y;
//printf("%f / %f; ", fxy.x, fxy.y); выводим значения "потока" каждого пикселя
}
//printf("\n");
}
// //вывод всех значений (сумм для каждого кадра)
// //вывод значений смещения пикселя
// printf("Total summ = %f / %f;\n", xx, yy); //компилируем без флага -mwindows
//ыводим сообщение только если вышли за какую-то границу
if((xx > -10000) or (yy > -10000))
printf("Warning! %f / %f;\n", xx, yy);
if(cv::waitKey(33) >= 0) break;
}
printf("Ok");
return 0;
}
Драйверы для камеры.
Драйвер для Logitech C160. ОС: Windows 8, Windows 10. Работает со следующими веб-камерами: C170, C270, C310, C525, C615 и C920 (С C160 тоже работает). Скачать
Драйвер для Logitech C160. ОС: Windows 7 & Vista & XP. Скачать
to be continued...