Adressierungsprobleme auf dem NGW100
-
Hallo,
ich arbeite seit längerem mit dem NGW100. Auf dem NGW100 ist ein Kameraboard
(Framos CM1314YFM) über die serielle Schnittstelle des NGW 100 angeschlossen.
Meine Aufgabe ist es mit Hilfe der Kamera kreisförmige Objekte(z.B.
Luftaballons) mit Hilfe von OpenCV zu lokalisieren. Das habe ich auch ganz gut
hinbekommen, aber über die Webcam meines Laptops.
Nun soll ich den vorhandenen Code auf das NGW100 Board portieren. Genau hier
habe ich ein Problem, welches vermutlich an der Adressierung liegt.
Die Kamera nimmt Fotos in dem VYUY Format auf und es soll in den RGB Farbraum
konvertiert werden, da OpenCV nur mit dem RGB Format arbeiten kann.
Fehlerbeschreibung:
Die Funktion yuv422 bekommt als erstes Parameter, die line_yuv Werte(eigentlich
vyuy) übergeben und soll nach der Berechnung die Werte als Ausgabeparameter an
line_rgb abspeichern.
Der Code:
static void yuv422_to_rgb(unsigned char *src, unsigned char *dst,
unsigned int nr_pixels)
{
unsigned int i;
int y1, y2, u, v;int x = 0;
for (i = 0; i < nr_pixels; i += 2)
{y2 = *src++;
v = *src++;
y1 = *src++;
u = *src++;
y1 -= 16;
u -= 128;
v -= 128;
y2 -= 16;*dst++ = clip(( 298 * y1 + 409 * v + 128) >> 8);
*dst++ = clip(( 298 * y1 - 100 * u - 208 * v + 128) >> 8);
*dst++ = clip(( 298 * y1 + 516 * u + 128) >> 8);
*dst++ = clip(( 298 * y2 + 409 * v + 128) >> 8);
*dst++ = clip(( 298 * y2 - 100 * u - 208 * v + 128) >> 8);
*dst++ = clip(( 298 * y2 + 516 * u + 128) >> 8);if( x == 0)
{//Diese Werte stimmen nicht mit den Werten von unten überein
printf("A: 1: %i, 2: %i, 3: %i, 4: %i, 5: %i, 6:%i\n",
dst[1], dst[2], dst[3], dst[4], dst[5], dst[6]);x++;
}
}
}int main()
{
.
.
.unsigned char *line_rgb;
unsigned char *line_yuv;line_rgb = (unsigned char
calloc(image->width * 3,
sizeof(unsigned char));line_yuv = (unsigned char
image->buf;yuv422_to_rgb(line_yuv, line_rgb, image->width);
//Diese Werte stimmen nicht mit den Werten von oben überein
printf("B: 1: %i, 2: %i, 3: %i, 4: %i, 5: %i, 6: %i,\n",
line_rgb[0], line_rgb[1], line_rgb[2], line_rgb[3],
line_rgb[4], line_rgb[5]);
.
.
.}
Ich bin mir sicher, dass es ein kleiner Fehler ist, aber leider komme ich
einfach nicht zu einer Lösung.
Vielen Dank für eure Hilfe...
Gruss aus Berlin
-
1. Garantiert falsches Forum. Entweder C, wenn du glaubst dass es am Programm selbst liegt oder RudP wenn du Hilfe zum NGW100 brauchst.
2. Ohne die cpp-Tags (links unter den Smileys) sieht der Code so hässlich aus, das liest sich keiner durch
3. Deine Fehlerbeschreibung ist eine Funktionsbeschreibung. Soll ich etwa den Code vollständig nachvollziehen, an welcher Stelle wohl ein Fehler unbekannter Art auftreten könnte? Was ist der Fehler?Ich verschiebe den Beitrag jetzt mal nicht in ein passendes Subforum, denn mit so einem Beitrag bekommst du keine Antworten und dann nervt der Beitrag nur noch mehr Leser. Erstell lieber im passenden Bereich noch einmal einen guten(!) Beitrag. Lies dir auch diese Links durch, wenn du Ratschläge zu guten Fragen brauchst:
http://www.c-plusplus.net/forum/200753
http://www.c-plusplus.net/forum/136013
-
thulfikar schrieb:
printf("A: 1: %i, 2: %i, 3: %i, 4: %i, 5: %i, 6:%i\n",
dst[1], dst[2], dst[3], dst[4], dst[5], dst[6]);//Diese Werte stimmen nicht mit den Werten von oben überein
printf("B: 1: %i, 2: %i, 3: %i, 4: %i, 5: %i, 6: %i,\n",
line_rgb[0], line_rgb[1], line_rgb[2], line_rgb[3], line_rgb[4], line_rgb[5]);Vergleich doch mal die Indizes in den beiden Ausgabebefehlen - erkennst du da einen Unterschied?
-
... abgesehen davon wird dst in der Funktion auch noch verändert. Ohne den vollständigen Code kann man also gar nichts dazu sagen.