+7(960) 250-82-68 sergey@mirossa.ru


button
button
button
button
button


 
Статьи
 

Пакет 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
// компиляция:

//компилируем без флага -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 !!! нужно крутить настройки параметров этой функции
calcOpticalFlowFarneback(etalon, frame, flowUmat, 0.4, 1, 4, 2, 1, 1, 0); //в include "opencv2/video/tracking.hpp" and -lopencv_vide2413.dll

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;
}

to be continued...