Fehler beim einlesen von Pixeln mittels OpenCV
-
Hallo zusammen,
ich beschäftige mich seit kurzer Zeit mit OpenCV und wollte mal ein bisschen
rumspielen. Ich wollte Pixel aus einem geladenen Bild auslesen und das ganze Bild dann in ein Grauwertbild umwandeln.
Leider bekomme ich immer ein Fehler beim Auslesen der Pixel.Mein Code:
void binaer(){ IplImage* image = cvLoadImage("D:\\verrauscht.tiff"); /*IplImage* image = cvCreateImage(cvSize(500,500),8,3); cvLine(image,cvPoint(0,0),cvPoint(99,99),CV_RGB(128,0,0)); cvLine(image,cvPoint(0,99),cvPoint(99,0),CV_RGB(128,56,0));*/ if(!image)return; IplImage* binary = cvCreateImage(cvGetSize(image),8,1); int wid=image->width; int hei=image->height; int x,y; for(x=0;x<wid;x++){ for(y=0;y<hei;y++){ //cout << "x/y: "<<x<<" " <<y<<endl; double b = cvGet2D(image,x,y).val[0] * 0.299; double g = cvGet2D(image,x,y).val[1] * 0.587; double r = cvGet2D(image,x,y).val[2] * 0.114; //cout << r+g+b <<endl; //cvSet2D(binary,x,y,cvScalar(r+g+b)); } } cvNamedWindow("bin",CV_WINDOW_AUTOSIZE); cvShowImage("bin",binary); cvWaitKey(); cvReleaseImage(&binary); cvReleaseImage(&image); cvDestroyAllWindows(); }
Der Fehler den mir Visual Studio 2008 auswirft lautet folgendermaßen:
One of arguments values is out of range (index is out of range) in funktion
cvPtr2D.Woran kann das liegen, was mache ich falsch?
P.S.: Wenn ich ein selbst gezeichnetes Bild nehme (siehe auskommentierte Zeilen am Anfang des Codes) klappt es.
-
so habs jetzt rausgefunden, man muss x und y tauschen.
Sind schon komisch geschrieben die Funktionen, zuerst muss man den Y-Parameter
und dann erst den X-Parameter angeben.
Also z.b.: double b = cvGet2D(image,y,x).val[0] * 0.299;Da ist das ja auf ganz schön vielen Seiten falsch beschrieben worden.
-
Tipp:
IplImage* cvCreateImage(CvSize size, int depth, int channels);
Was du suchst ist wohl CvSize( )...