Problem with Video Object tracking with opencv
-
hello,
I have a Problem with my source-code, the program should basicly track objects with a special colour (blue), it compiles without errors or so, but it is not running properly,
#include<stdafx.h>
#include <iostream>
int main(int argc, char **argv[1])
{
CvCapture *capture = cvCaptureFromCAM(0);
int frames = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);uchar *routdata, *goutdata, *target;
//Create a Window
cvNamedWindow("Video", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Final_RG", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Filtered_RG", CV_WINDOW_AUTOSIZE);//Bildskelett
IplImage *image = 0;
IplImage *routput = cvCreateImage( cvSize(640,480), 8, 3);
IplImage *goutput = cvCreateImage( cvSize(640,480), 8, 3);
IplImage *Final_RG = cvCreateImage( cvSize(640,480), 8, 3);
IplImage *Filtered_RG = cvCreateImage( cvSize(640,480), 8, 3);int nFrames = 300;
int j, k, m, n, p;// Pixelspeicher
int rindex [500][2];
int gindex [500][2];//Farberkennung
int red = 000;
int blue = 102;
int Green= 255;//Video soll hier starten
for (j = 0; j < nFrames; j++)
{
image = cvQueryFrame(capture);// für pixel benutzung
int step = image->widthStep/sizeof(uchar);cvCopy(image, routput, NULL);
cvCopy(image, goutput, NULL);// sonst ist das bild inverted
routput->origin = image->origin;
goutput->origin = image->origin;
Final_RG->origin = image->origin;
Filtered_RG->origin = image->origin;routdata = (uchar * ) routput->imageData;
goutdata = (uchar * ) routput->imageData;k = 0, p = 0;
for( m = 0; image->height; m++)
{
for( n = 0; image->width; n++)
{
if(routdata[m*step+n*3+2] > red && routdata[m*step+n*3+0] > blue)
{
std::cout <<k<< std::endl;
rindex[k][0] = m;
rindex[k][1] = n;[b]I inserted an cout to figure out what "k" is doing. it is counting till 6000+[b]
k = k + 1;
}
else
{
routdata[m*step+n*3+0] = 0;
routdata[m*step+n*3+1] = 0;
routdata[m*step+n*3+2] = 0;
}if(routdata[m*step+n*3+2] > red && routdata[m*step+n*3+1] > blue)
{
gindex[p][0] = m;
gindex[p][1] = n;p = p + 1;
}
else
{
goutdata[m*step+n*3+0] = 0;
goutdata[m*step+n*3+1] = 0;
goutdata[m*step+n*3+2] = 0;
}
}
}
cvAnd(routput, goutput, Final_RG, NULL);
cvSmooth(Final_RG, Filtered_RG, CV_MEDIAN, 5, 5, 0, 0);
target = (uchar Filtered_RG->imageData;int xmin = 400, xmax = 0;
int ymin = 400, ymax = 0;
for(m = 0; m < Filtered_RG->height; m++)
{
for(n = 0; n < Filtered_RG->width; n++)
{
if(target[m*step+n*3+2] > 100)
{
if(n < xmin)
xmin = n;
if(n > xmax)
xmax = n;
if(m < ymin)
ymin = m;
if(m > ymax)
ymax = m;
}
}
}cvRectangle(image, cvPoint(xmin, ymin), cvPoint(xmax, ymax), CV_RGB(0, 255, 0), 2, 8, 0);
cvCircle(image, cvPoint((xmin + xmax)/2, (ymin+ymax)/2), 0, CV_RGB(255, 0, 0), 2, 8, 0);// show image
cvShowImage("Video", image);
cvShowImage("Final_RG", Final_RG);
cvShowImage("Filtered_RG", Filtered_RG);cvWaitKey(0);
}cvReleaseCapture(&capture);
cvDestroyWindow("Video");
cvDestroyWindow("Final_RG");
cvDestroyWindow("Filtered_RG");return 0;
}I guess that there is an unfriendly loop in my source code, but i can´t find out where and why,
I´ll be very happy if someone could help me out.
greetz
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.