работа с контурами OpenCV
Здравствуйте, написал код определяющий нужные мне контуры:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
IplImage* image = cvLoadImage( "Img.jpg", 1);
//Создаем изображение в градациях серого
IplImage* img_gray= cvCreateImage( cvSize(image->width,image->height), 8, 1);
CvSeq* contours = 0;
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor( image, img_gray, CV_BGR2GRAY );
cvCanny(img_gray, img_gray, 45, 200);
cvFindContours( img_gray, storage, &contours, sizeof(CvContour),
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
cvDrawContours( image, contours, CV_RGB(255,0,0), CV_RGB(0,255,0),2, 1, CV_AA,
cvPoint(0,0) );
CvSeq* h_next=0;
for( CvSeq* c=contours; c!=NULL; c=c->h_next )
{
if (c!=contours)
{
if (c->total<=100) //размер удаляемых контуров
{
//удаляем мелкие контуры
h_next->h_next=h_next->h_next->h_next;
continue;
}
}
h_next=c;
}
if (contours->total<=100) contours=contours->h_next;
cvNamedWindow("Object", 1);
cvShowImage( "Object", image);
cvWaitKey(0);
}
Как вытащить координаты нескольких случайных точек принадлежащих этим контурам?
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
IplImage* image = cvLoadImage( "Img.jpg", 1);
//Создаем изображение в градациях серого
IplImage* img_gray= cvCreateImage( cvSize(image->width,image->height), 8, 1);
CvSeq* contours = 0;
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor( image, img_gray, CV_BGR2GRAY );
cvCanny(img_gray, img_gray, 45, 200);
cvFindContours( img_gray, storage, &contours, sizeof(CvContour),
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
cvDrawContours( image, contours, CV_RGB(255,0,0), CV_RGB(0,255,0),2, 1, CV_AA,
cvPoint(0,0) );
CvSeq* h_next=0;
for( CvSeq* c=contours; c!=NULL; c=c->h_next )
{
if (c!=contours)
{
if (c->total<=100) //размер удаляемых контуров
{
//удаляем мелкие контуры
h_next->h_next=h_next->h_next->h_next;
continue;
}
}
h_next=c;
}
if (contours->total<=100) contours=contours->h_next;
cvNamedWindow("Object", 1);
cvShowImage( "Object", image);
cvWaitKey(0);
}
Как вытащить координаты нескольких случайных точек принадлежащих этим контурам?