2016-03-10 5 views
5

में अंधेरा फ़ोटो पता लगाने के लिए मैं जहाँ उपयोगकर्ता सामने कैमरे के साथ खुद की एक तस्वीर लेता है और फिर फोटो मेरी सर्वर पर अपलोड किया जा रहा है एक Android ऐप्लिकेशन है। मैंने देखा है कि मेरे सर्वर पर कई तस्वीरें बहुत अंधेरे आती हैं (कभी-कभी उपयोगकर्ता चेहरे को साफ़ करने के लिए लगभग असंभव)।कैसे एंड्रॉयड

मैं ऐसे फ़ोटो को फ़िल्टर और अधिसूचना प्रदर्शित करना चाहते हैं (उदाहरण के लिए। "फोटो भी अंधेरा है। एक और चित्र लें") एप्लिकेशन पक्ष में उपयोगकर्ता के लिए। मैं एंड्रॉइड में इस तरह का काम कैसे पूरा कर सकता हूं?

संपादित करें:

मुझे पता चला है कि कैसे एक ही पिक्सेल के लिए चमक गणना करने के लिए (यह जवाब देने के लिए के धन्यवाद: https://stackoverflow.com/a/16313099/2999943):

private boolean isPixelColorBright(int color) { 
    if (android.R.color.transparent == color) 
     return true; 

    boolean rtnValue = false; 

    int[] rgb = {Color.red(color), Color.green(color), Color.blue(color)}; 

    int brightness = (int) Math.sqrt(rgb[0] * rgb[0] * .299 + rgb[1] 
      * rgb[1] * .587 + rgb[2] * rgb[2] * .114); 

    if (brightness >= 200) { // light color 
     rtnValue = true; 
    } 

    return rtnValue; 
} 

लेकिन फिर भी मैं स्पष्ट रूप से पता कैसे नहीं है पूरी छवि चमक "स्थिति" निर्धारित करने के लिए। कोई सुझाव?

+0

आप एक झुलसाना पिक्सेल के लिए चमक निर्धारित कर सकते हैं, तो क्यों एक ही तरह से औसत मूल्य प्राप्त करने में सभी पिक्सल का विश्लेषण, और कहा कि का उपयोग नहीं? – JonasCz

उत्तर

7

एक प्रकार आप अपने फ़ोटो को एक चमक हिस्टोग्राम का निर्माण कर सकते हैं। Formula to determine brightness of RGB color यहां वर्णित चमक की गणना करें। फिर आकार 256 की सरणी शुरू करें और एक सरणी तत्व द्वारा वृद्धि करें जो सूचकांक प्रत्येक पिक्सेल की चमक है।

फिर देखो अगर बहुत ज्यादा मान बाईं ओर या सही एक पर कर रहे हैं, इसका मतलब है कि अपनी तस्वीर भी प्रकाश/अंधेरा है। उदाहरण के लिए आप 10 दाएं और बाएं मान देख सकते हैं।

कोड उदाहरण:

int histogram[256]; 
for (int i=0;i<256;i++) { 
    histogram[i] = 0; 
} 

for (int x = 0; x < a.getWidth(); x++) { 
    for(int y = 0; y < a.getHeight(); y++) { 
     int color = a.getRGB(x, y); 

     int r = Color.red(pixel); 
     int g = Color.green(pixel); 
     int b = Color.blue(pixel); 

     int brightness = (int) (0.2126*r + 0.7152*g + 0.0722*b); 
     histogram[brightness]++; 
    } 
} 

int allPixelsCount = a.getWidth() * a.getHeight(); 

// Count pixels with brightness less then 10 
int darkPixelCount = 0; 
for (int i=0;i<10;i++) { 
    darkPixelCount += histogram[i]; 
} 

if (darkPixelCount > allPixelCount * 0.25) // Dark picture. Play with a percentage 
else // Light picture. 
+0

उत्तर के लिए धन्यवाद। मैं आपकी प्रदान की गई जानकारी के अनुसार एक सिंगल पिक्सेल (मेरे संपादित प्रश्न को देखें) के लिए ब्रिगेटी स्तर की गणना कर सकता हूं। लेकिन क्या आप और कदमों को और विस्तार से समझा सकते हैं? मैं छवि चमक हिस्टोग्राम कैसे बना सकता हूं? इसके अलावा मुझे पूरी तरह से यह वाक्य नहीं मिलता है: "फिर आकार 256 की सरणी शुरू करें और एक सरणी तत्व द्वारा वृद्धि करें जो सूचकांक प्रत्येक पिक्सेल की चमक है।" क्या आप अपने विचार को शॉर्ट कोड स्निपेट के साथ चित्रित कर सकते हैं? – user2999943

+0

कोड उदाहरण जोड़ा गया। मुझसे पूछो कि क्या कुछ स्पष्ट नहीं है। –

+0

अब मुझे मिल गया। धन्यवाद! – user2999943