2012-09-07 11 views
5

ist es möglich, benutzerdefinierte Rasterlinien mit definierten Punkten an allen Schnittpunkten gegen die Ausgabe des Farbdetektionssample in der opencv-Beispieldatei zu zeichnen? Grundsätzlich muss die Webcam den menschlichen Kopf und die Schultern von oben erkennen. Dann, wenn eine Person erkannt wird, brauche ich die Gitterlinien, damit ich wissen kann, von welchem ​​äußersten Gitter (linke Schulter), bis zum nächsten äußersten Gitter (rechte Schulter), in beiden x und y Achse (Stirn und Hinterkopf). Danach müssen diese Punkte für den Betrieb von mechanischen Teilen wie Aktuator und Ventile gesendet werden.Zeichnen fester Gitterlinien mit opencv

Ich werde wirklich jede Hilfe dankbar, Coz I jetzt wirklich verzweifelt bin ..

Thx!

Ich bin ein OpenCV-Benutzer auf Einstiegsebene, mit nur Anfängerkenntnisse über die Arbeit mit C++. Ich verwende derzeit opencvV2.1, auf VS2008.

Antwort

3

Es ist schwierig zu sagen, was Ihr Problem wirklich ist.

Wenn Sie nur Rasterlinien zeichnen möchten, gibt es keine opencv-Funktion, die das tut. Um Linien in einem Raster zu plotten, können Sie cv::line in einer Schleife verwenden und dann die Schnittpunkte mit einer verschachtelten Schleife zeichnen.

// 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

für ein Gitter auf die Bildzeichnungs OpenCV Linienfunktion

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