2012-09-07 11 views
5

Czy można rysować linie siatki zdefiniowane przez użytkownika ze zdefiniowanymi punktami na wszystkich skrzyżowaniach, na wyjściu próbki detekcji koloru w pliku próbki opencv? Zasadniczo kamera internetowa będzie musiała wykrywać ludzką głowę i ramiona ponad tobą. Potem, kiedy ktoś zostanie wykryty, potrzebuję linii siatki, aby móc się zorientować, z której zewnętrznej siatki (lewego ramienia), do następnej najbardziej zewnętrznej siatki (prawego ramienia), zarówno w osi X, jak i Y (czoło i tył głowy). Następnie punkty te należy wysłać do pracy z częściami mechanicznymi, takimi jak siłownik i zawory.Rysowanie ustalonego zestawu linii siatki z opencv

będę naprawdę wdzięczny za każdą pomoc, bo jestem naprawdę zdesperowany teraz ..

Thx!

Jestem użytkownikiem opencv na poziomie podstawowym, z podstawową wiedzą o pracy z C++. Obecnie używam opencvV2.1, na VS2008.

Odpowiedz

3

Trudno powiedzieć, jaki jest twój problem.

Jeśli chcesz tylko rysować linie siatki, nie ma żadnej funkcji opencv, która to robi. Aby narysować linie w siatce, można użyć w pętli cv::line, a następnie narysować przecięcia za pomocą zagnieżdżonej pętli.

// assume that mat.type=CV_8UC3 

dist=50; 

int width=mat.size().width; 
int height=mat.size().height; 

for(int i=0;i<height;i+=dist) 
    cv::line(mat,Point(0,i),Point(width,i),cv::Scalar(255,255,255)); 

for(int i=0;i<width;i+=dist) 
    cv::line(mat,Point(i,0),Point(i,height),cv::Scalar(255,255,255)); 

for(int i=0;i<width;i+=dist) 
    for(int j=0;j<height;j+=dist) 
    mat.at<cv::Vec3b>(i,j)=cv::Scalar(10,10,10); 
0

Do rysowania siatki na obrazie przy użyciu funkcji linii OpenCV

Mat mat_img(image); 
int stepSize = 65; 

int width = mat_img.size().width; 
int height = mat_img.size().height; 

for (int i = 0; i<height; i += stepSize) 
    cv::line(mat_img, Point(0, i), Point(width, i), cv::Scalar(0, 255, 255)); 

for (int i = 0; i<width; i += stepsSize) 
    cv::line(mat_img, Point(i, 0), Point(i, height), cv::Scalar(255, 0, 255));