Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Farbraumkonvertierung RGB-YUV

Frage Entwicklung C und C++

Mitglied: Bierkistenschlepper

Bierkistenschlepper (Level 2) - Jetzt verbinden

22.01.2010 um 12:07 Uhr, 4424 Aufrufe

Hallo,

leider klappt bei mir die Farbraumkonvertierung von RGB nach YUV in der Sprache C nicht. Ich bin jetzt schon ewig am probieren und obwohl es in der englischen Wikipedia sehr genau beschrieben ist, hat das Bild nachher einen Farbstich...
http://en.wikipedia.org/wiki/YUV
Aktuell habe ich das Verfahren aus numerical approximation implementiert. Hier mein Code:

int i, j;
int rgb[3];
int yuv[3] = {0, 0, 0};
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
rgb[0] = B.val[0][i*B.dimx+j];
rgb[1] = B.val[1][i*B.dimx+j];
rgb[2] = B.val[2][i*B.dimx+j];

//YUV->RGB-Transformation wie in der englischen Wikipedia
yuv[0] = 66*rgb[0] + 129*rgb[1] + 25*rgb[2];
yuv[1] = -38*rgb[0] -74*rgb[1] + 112*rgb[2];
yuv[2] = 112*rgb[0] - 94*rgb[1] - 18*rgb[2];
yuv[0] = yuv[0] + 128 >> 8;
yuv[1] = yuv[1] + 128 >> 8;
yuv[2] = yuv[2] + 128 >> 8;
B.val[0][i*B.dimx+j] = yuv[0]+16;
B.val[1][i*B.dimx+j] = yuv[1]+128;
B.val[2][i*B.dimx+j] = yuv[2]+128;
printf("YUV-Werte %d %d %d \n", B.val[0][i*B.dimx+j], B.val[1][i*B.dimx+j], B.val[2][i*B.dimx+j]);


}
}

Vor der Transformation (das ist ein Testbild)
P3
4 4
255
255 255 255 10 1 1 200 2 4 3 3 10
98 5 0 1 1 1 2 2 2 3 3 10
0 235 0 10 1 132 2 2 2 3 128 10
0 5 0 1 1 1 2 2 2 3 3 10

Nach der Transformation
P3
4 4
255
235 128 128 19 127 132 69 99 214 19 131 128
44 112 169 17 128 128 18 128 128 19 131 128
134 60 42 32 184 123 18 128 128 82 95 82
19 127 126 17 128 128 18 128 128 19 131 128

Also eigentlich ists genau das gleiche wie in der Wikipedia, aber das Bild hat einen Grün/Blaustich und die Farben sind total verkehrt. Auf den ersten Blick fällt mir aber auf, dass es keine negativen Werte gibt. Laut meiner Dozentin sollten U und V aber im Bereich -[128, 127] liegen... Ich habe es auch schon mit dieser Matrixmultiplikation versucht, aber dann scheitere ich an dem "verschieben" der Zahlen, d.h. manche Zahlen sind zu groß.
Ähnliche Inhalte
Grafikkarten & Monitore
Wie schliesst man ein RGB Kabel an und wo gibt es sowas noch? (20)

Frage von winIT3264 zum Thema Grafikkarten & Monitore ...

CPU, RAM, Mainboards
Corsair RGB LED Lüfter laut (2)

Frage von uridium69 zum Thema CPU, RAM, Mainboards ...

C und C++
Arduino "Serial input zu analogwrite" (1)

Frage von Zerou24 zum Thema C und C ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte
Firewall
Richtige Grundeinstellungen der Pfsense für mein Netzwerk (14)

Frage von Spitzbube zum Thema Firewall ...

Switche und Hubs
gelöst Cisco 2960x Stacking über mehrere Etagen (12)

Frage von b3scher zum Thema Switche und Hubs ...