2009-11-15 12 views
9

आरजीबी-> वाईयूवी रूपांतरण सी/सी ++ में कैसे करें?आरजीबी-> वाईयूवी रूपांतरण सी/सी ++ में कैसे करें?

.. मैं कुछ बिटमैप है आरजीबी मैं YUV को

Libs यह कन्वर्ट करने के लिए की आवश्यकता है? Tuts? लेख?

+4

'/ एक्शनस्क्रिप्ट/सी में सी/सी ++ /' में यह एक नया सवाल नहीं बनाता है http://stackoverflow.com/questions/1737712/how-to-perform-rgb-yuv-conversion-with-actionscript – voyager

+1

आप आरयूजी मूल्य को यूयूवी में बदलना चाहते हैं? या एक आरजीबी बिटमैप को एक यूयूवी फ़ाइल में बदलें? आप एक छवि फ़ाइल कनवर्ट करना चाहते हैं, है ना? – voyager

+0

मुझे यकीन है कि इस काम को gfx कार्ड पर धक्का देने का एक तरीका है। इस प्रकार का ऑपरेशन जीएफएक्स कार्ड के लिए बिल्कुल सही है। – fishfood

उत्तर

-3
+0

प्रश्न पूछा गया कि सी/सी ++ में रूपांतरण कैसे करें। ImageMagick निश्चित रूप से सी ++ है, लेकिन यहां कोई फ़ंक्शंस दिखाया नहीं गया है, (प्लस ImageMagick अपने लाइसेंस के तहत है) इसलिए मैंने Leszek के जवाब को वोट दिया और उखाड़ फेंक दिया। –

17

चेक इस अनुच्छेद: http://www.fourcc.org/fccyvrgb.php रूपांतरण काफी आसान है, इसलिए आप शायद इस

Y =  (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 

Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 

Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128 

Previously answered for ActionScript

+0

हाय Voyager मुझे कुछ मदद की ज़रूरत है मैंने अपना कोड डंप किया है जो yv12-> rgb565 है। उसी तरह मुझे yuv444 के लिए rgb888 करने के लिए प्रदर्शन करना है। कृपया मेरा मार्ग दर्शन कीजिए। कृपया आप फ़ंक्शन के लिए अपना नवीनतम प्रश्न देख सकते हैं जो yuv12-> rgb565 – Abhineet

+1

को परिवर्तित करता है ध्यान दें कि कलर स्पेस को नियंत्रित करने वाले कई मानदंड हैं जिन्हें आप एक yuv फ़ाइल (यानी बीटी 601, बीटी 70 9, xvYcc) में सामना कर सकते हैं, ये फॉर्मूल्स आपको एक विवेकपूर्ण छवि देगा उनमें से अधिकांश के साथ, लेकिन आपको coplors "दाएं" प्राप्त करने के लिए उन्हें बदलने की आवश्यकता हो सकती है (यदि आपके पास xvYcc या non-8 बिट डेटा – tletnes

29

आप भी इन पूर्णांक की कोशिश करना चाहते हो सकता है के आधार पर अपने खुद के समारोह लिख सकता है केवल गणना (तैरता की तुलना में तेजी से किया जाना चाहिए)

#define CLIP(X) ((X) > 255 ? 255 : (X) < 0 ? 0 : X) 

// RGB -> YUV 
#define RGB2Y(R, G, B) CLIP((( 66 * (R) + 129 * (G) + 25 * (B) + 128) >> 8) + 16) 
#define RGB2U(R, G, B) CLIP(((-38 * (R) - 74 * (G) + 112 * (B) + 128) >> 8) + 128) 
#define RGB2V(R, G, B) CLIP(((112 * (R) - 94 * (G) - 18 * (B) + 128) >> 8) + 128) 

// YUV -> RGB 
#define C(Y) ((Y) - 16 ) 
#define D(U) ((U) - 128) 
#define E(V) ((V) - 128) 

#define YUV2R(Y, U, V) CLIP((298 * C(Y)    + 409 * E(V) + 128) >> 8) 
#define YUV2G(Y, U, V) CLIP((298 * C(Y) - 100 * D(U) - 208 * E(V) + 128) >> 8) 
#define YUV2B(Y, U, V) CLIP((298 * C(Y) + 516 * D(U)    + 128) >> 8) 

// RGB -> YCbCr 
#define CRGB2Y(R, G, B) CLIP((19595 * R + 38470 * G + 7471 * B) >> 16) 
#define CRGB2Cb(R, G, B) CLIP((36962 * (B - CLIP((19595 * R + 38470 * G + 7471 * B) >> 16)) >> 16) + 128) 
#define CRGB2Cr(R, G, B) CLIP((46727 * (R - CLIP((19595 * R + 38470 * G + 7471 * B) >> 16)) >> 16) + 128) 

// YCbCr -> RGB 
#define CYCbCr2R(Y, Cb, Cr) CLIP(Y + (91881 * Cr >> 16) - 179) 
#define CYCbCr2G(Y, Cb, Cr) CLIP(Y - ((22544 * Cb + 46793 * Cr) >> 16) + 135) 
#define CYCbCr2B(Y, Cb, Cr) CLIP(Y + (116129 * Cb >> 16) - 226) 
+3

है तो आपको इनपुट या आउटपुट मानों को स्केल करना पड़ सकता है यह सब पागल काला जादू है मेरे लिए :) – paulm

+0

क्या यह बेहतर छवि नहीं है, तथाकथित "ImageMagick" की तुलना में? – kenmux

संबंधित मुद्दे