Ich bin mit dem in OpenCV 1.1 verwendeten IPL-Bildformat gut vertraut. Allerdings verwende ich die neueste Version 2.4 und möchte auf die C++ - Schnittstelle von OpenCV wechseln. Hier ist die Methode, mit der ich die Pixel in einem Bild zuzugreifen:Von IPLImage zu Mat
int step = img->widthStep;
int height = img->height;
int width = img->width;
unsigned char* data = (unsigned char*) img->imageData;
for (int i=0; i<height; i++)
{
for (int j=0; j<step; j+=3) // 3 is the number of channels.
{
if (data[i*step + j] > 200) // For blue
data[i*step + j] = 255;
if (data[i*step + j + 1] > 200) // For green
data[i*step + j + 1] = 255;
if (data[i*step + j + 2] > 200) // For red
data[i*step + j + 2] = 255;
}
}
Ich brauche Hilfe für die Umwandlung genau diesen Codeblockes mit der Mattenstruktur. Ich finde hier und da einige Funktionen, aber es wird sehr hilfreich sein, wenn ich die genaue Umsetzung der obigen paar Zeilen als Ganzes bekomme.
tun alles in IPL-Bild und dann die Umwandlung zurück - wird diese schnell genug sein? Ich möchte nicht, dass dieser Prozess etwas zusätzliche Verarbeitungszeit benötigt. Und zu diesem über Komplikation Sache - das ist nur ein Beispiel-Code, nehme an, dass ich verschiedene Schwellenwerte für rot, grün und blau geben muss. Wird Ihre Methode dann funktionieren? – Soumyajit
Wenn Sie zwischen Mat und IplImage konvertieren, haben Sie die Möglichkeit, die Daten zu kopieren oder nicht. Wenn Sie nicht kopieren, ist der Overhead wirklich klein. Selbst wenn Sie kopieren, bezweifle ich, dass der Aufwand signifikant ist, da Ihre gesamte Verarbeitung länger als 1 Sekunde dauert. Hinzugefügt für verschiedene Schwellenwerte. – guinny
Ihr Code funktioniert nicht, wenn die Matrix einen Schritt hat. Dies ist z.B. für Matrix-Header, die als ROI einer anderen Matrix erstellt werden. Verwenden Sie Iteratoren oder Zeilenzeigerzugriff, um solche Fehler zu vermeiden! – ypnos