OpenCV, установка

Установка Opencv. В основном я работаю на Linux то и решил установить на нем, да и по проще установка и далее компиляция и т.д. Итак в Synaptic набрал Opencv и все что нашел установил.Вот и вся установка:).

Снимок экрана от 2015-11-05 21:50:40

 

 

 

 

 

Дале для работы необходимо установить cmake.

Снимок экрана от 2015-11-05 21:59:33

Я обычно пользуюсь программой для разработки Geany, но здесь кто на чем привык.

Снимок экрана от 2015-11-05 22:03:10

Итак все установили, пробуем что то сотворить:). Для удобства создаем отдельную папку, и будем уже там работать. Создаем файл Makefile без расширения с содержанием:

CC              := g++
CFLAGS          := -I/usr/include/opencv -L/usr/lib
OBJECTS         :=
LIBRARIES       := -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_video -lopencv_videostab -lopencv_objdetect -lopencv_features2d
.PHONY: all clean
all: test
test:
$(CC) $(CFLAGS) -o test test.cpp $(LIBRARIES)
clean:
rm -f *.o
Makefile (347.0 B, 208 downloads)

здесь вроде все понятно, путь до библиотек и какие библиотеки подключать. Саздаем файл test.cpp и в нем уже пишем код. Можем просто скопировать и вставить.

#include «cv.h»

#include «highgui.h»

#include <stdio.h>

#include <ctype.h>

#include <iostream>

void FindBall(IplImage* Img);

void Counter(IplImage* img);

CvPoint2D32f center;

float radius;

long pointer=0;

int main( int argc, const char** argv )

{

CvCapture* capture = NULL;

capture = cvCaptureFromCAM( 0 );

cvNamedWindow( «Demo», 1 );

for(;;)

{

IplImage* frame = 0;

int i, k, c;

frame = cvQueryFrame( capture );

if( !frame )

break;

FindBall(frame);

cvShowImage( «Demo», frame );

c = cvWaitKey(50);

if( (char)c == 27 )

break;

pointer++;

}

cvWaitKey(0);

cvReleaseCapture( &capture );

cvDestroyWindow(«Demo»);

return 0;

}

void FindBall(IplImage* Img)

{

IplImage* Image=cvCreateImage( cvGetSize(Img), 8, 3 );

cvCopy(Img,Image);

//Теперь необходимо получить доступ к всем пикселям.

uchar* ptr1;

ptr1 = (uchar*) (Image->imageData );

int i,j;

for(i=0;i<Img->height;i++)

for(j=0;j<Img->width;j++)

{

//R > 1.5*G, R > 2*B

if (ptr1[j*3+2+i*Image->widthStep]<1*ptr1[j*3+1+i*Image->widthStep]

&&

ptr1[j*3+2+i*Image->widthStep]<10*ptr1[j*3+i*Image->widthStep])

{

ptr1[j*3+i*Image->widthStep]=255;

ptr1[j*3+1+i*Image->widthStep]=255;

ptr1[j*3+2+i*Image->widthStep]=255;

}

else

{

ptr1[j*3+i*Image->widthStep]=0;

ptr1[j*3+1+i*Image->widthStep]=0;

ptr1[j*3+2+i*Image->widthStep]=0;

}

}

//cvCopy(Image,Img);

//Выделение контуров и поиск наибольшего контура

Counter(Image);

if (center.x>-1)

{

CvPoint p;

p.x=center.x;

p.y=center.y;

cvCircle( Img, p, radius, CV_RGB(255,0,0), 3, 8, 0 );

}

cvReleaseImage( &Image );

}

void Counter(IplImage* img)

{

IplImage* img_gray= cvCreateImage( cvSize(img->width,img->height), 8, 1);

CvSeq* contours = 0;

CvMemStorage* storage = cvCreateMemStorage(0);

cvCvtColor( img, img_gray, CV_BGR2GRAY );

cvFindContours( img_gray, storage, &contours, sizeof(CvContour),

CV_RETR_LIST

, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );

CvSeq* h_next=0;

//Поиск максимального контура

for( CvSeq* c=contours; c!=NULL; c=c->h_next )

{

if (c!=contours)

{

//Проверяем какой контур больше

if (h_next->total>=c->total)

{

h_next->h_next=h_next->h_next->h_next;

continue;

}

}

h_next=c;

}

center.x=-1;

if (h_next->total<5) return;//нет мяча — слишком маленькие контуры

cvDrawContours( img, h_next, CV_RGB(255,0,0), CV_RGB(0,255,0),2, 2, CV_AA,

cvPoint(0,0) );

//Минимальная окружность

cvMinEnclosingCircle(h_next,&center,&radius);

cvReleaseMemStorage( &storage);

cvReleaseImage( &img_gray );

}

 
test (12.3 KiB, 194 downloads)

далее запускаем терминал и задаем команду на компиляцию make :

Снимок экрана от 2015-11-05 22:35:34

если есть ошибка в коде то выйдет сообщение об ошибке, если нет то создастся исполняемый файл Test. Зупустив его увидим результаты наших трудов:).

Как то так.

И литература

Opencvkruchinin (2.5 MiB, 2228 downloads)
, код программы взят из этой книги и немного переделан.

Добавить комментарий