कैसे बादल छा जाता है?


22

चुनौती

आकाश की एक छवि को देखते हुए, आपको ओकटास में क्लाउड कवर का उत्पादन करना होगा। आपूर्ति की गई छवि एक छवि फ़ाइल होगी (प्रकार आपके ऊपर है) और आउटपुट STDOUT में होना चाहिए।

ओकटास

मौसम विज्ञान में, एक ओक्टा माप की एक इकाई है जिसका उपयोग किसी भी स्थान जैसे कि मौसम स्टेशन पर क्लाउड कवर की मात्रा का वर्णन करने के लिए किया जाता है। आकाश की स्थिति का अनुमान लगाया जाता है कि 0 ओकटास (पूरी तरह से स्पष्ट आकाश) से 8 ओकटास (पूरी तरह से घटाटोप) तक आकाश के कितने एगल्स को कवर किया गया है।

आकाश हमेशा दोपहर (इसलिए, नीला आकाश, लाल / रात आकाश नहीं) के आसपास से एक तस्वीर होगी।

बादल का रंग हमेशा एक रंग होगा जो निम्न पैटर्न का अनुसरण करता है:

#ABCDEF

कहाँ AB >= C0, CD >= C0और EF >= C0

या, RGB में:

(A, B, C)

कहाँ A >= 192, B >= 192और C >= 192

यहाँ ओकटास से संबंधित प्रतिशत कवरेज हैं:

0%    - 0 oktas
12.5% - 1 okta
25%   - 2 oktas
37.5% - 3 oktas
50%   - 4 oktas
62.5% - 5 oktas
75%   - 6 oktas
87.5% - 7 oktas
100%  - 8 oktas

प्रतिशत छवि का प्रतिशत है जो बादल है।

यदि आपकी छवि का प्रतिशत बादल 12.5 का एक से अधिक नहीं है, तो आपको निकटतम दौर में जाना चाहिए।

उत्पादन

आउटपुट सिर्फ ओक्टा नंबर होना चाहिए (आपको यूनिट कहने की ज़रूरत नहीं है)।

उदाहरण

1 ओक्टा (18.030743615677714% बादल)

0 ओकटास (0.0% बादल)

3 ओकटास (42.66319444444445% बादल)

1 ओक्टा (12.000401814778645% बादल)

पायथन कोड का उपयोग संख्याओं की गणना करने के लिए किया जाता है

जीतना

बाइट्स में सबसे छोटा कोड जीतता है।


पिछले एक 3 ओकटास नहीं है?
TheLethalCoder

@ द लीथलकोडर हूप्स, संपादित
बीटा

क्या किसी छवि के आयाम के लिए अधिकतम है?
झबरा

2
मैंने एक 4 वां टेस्ट केस जोड़ा है जिसमें 12.5 तक की राउंडिंग की आवश्यकता होती है, क्योंकि पूर्णांक फ़्लोरिंग का उपयोग करने वाले उत्तर पहले 3 टेस्ट केस पास कर रहे होते हैं।
जस्टिन मेरिनर

1
उन भाषाओं के बारे में जिनमें C ++ जैसी छवि प्रसंस्करण क्षमताएं नहीं हैं, क्या लाइब्रेरी का उपयोग करना ठीक है? यदि हां, तो बाइट काउंट के लिए, इसे केवल लिखित कोड या प्रोग्राम को चलाने के लिए आवश्यक DLL फ़ाइलों के आकार की गणना करनी चाहिए?
HatsuPointerKun

जवाबों:


10

पायथन 2 , 114 110 98 बाइट्स

-4 बाइट्स थेलथेलकोडर
-12 बाइट्स रूड के लिए धन्यवाद

import PIL.Image as P
i=P.open(input()).getdata()
print round(8.*sum(min(x)>191for x in i)/len(i))

इसे ऑनलाइन आज़माएं!


191इसके बजाय का उपयोग करें ?
TheLethalCoder

2
मैं सुझाव देने जा रहा था x&y&z&192>191, लेकिन अद्यतन संस्करण अभी छोटा है।
अरनुलद

2
आप संभावित जगह ले सकता है import PIL.Image as Pके साथ from PIL.Image import*और 1 बाइट को बचाने जब बदल रहा i=P.openकरने के लिए i=open? मुझे नहीं पता कि क्या समस्याएँ पैदा होती हैं क्योंकि खुले पहले से ही एक परिभाषित कार्य है, लेकिन मैं परीक्षण नहीं कर सकता क्योंकि मेरे पास मॉड्यूल स्थापित करने की क्षमता नहीं है।
अर्नोल्ड पामर

1
हाँ, यह काम करने लगता है। 1 बाइट बचाता है।
Arfie

2
@ अपने कोड को सभी प्लेटफार्मों पर नहीं चलाना है - भाषा दुभाषिया द्वारा परिभाषित की गई है। अगर यह आपके लिए चलता है तो यह मान्य है।
टिम

10

MATL , 18 17 बाइट्स

Yi191>3&A1eYm8*Yo

उदाहरण चार प्रदान की गई छवियों के साथ चलता है (पूर्वावलोकन गुणवत्ता के बारे में खेद है; पूर्ण संकल्प के लिए क्लिक करें):

यहां छवि विवरण दर्ज करें

या अंतिम चार वर्णों को बिना राउंडिंग के परिणाम देखने के लिए हटा दें:

यहां छवि विवरण दर्ज करें

व्याख्या

Yi     % Implicitly input filename or URL. Read image. Gives an M×N×3 array
191>   % Does each entry exceed 191?
3&A    % True for 3rd-dim "lines" that only contain true. Gives an M×N matrix
1e     % Linearize (flatten) into a 1×L row vector, with L = M*N
Ym     % Mean of vector
8*     % Multiply by 8
Yo     % Round. Implicitly display

मुझे आश्चर्य है कि esolangs का उपयोग करके क्या किया जा सकता है
Новиков

6

जावा (ओपनजेडके 8) , 204 बाइट्स

i->{int x=0,y=0,t=0,w=i.getWidth(),h=i.getHeight();for(;x<w;)for(y=0;y<h;){java.awt.Color c=new java.awt.Color(i.getRGB(x++,y++));if(c.getRed()>191&&c.getBlue()>191&&c.getGreen()>191)t++;}return 8*t/w/h;}

इसे ऑनलाइन आज़माएं! मैं हमेशा यह भूल जाता हूं कि TIO STDERR को डिबग टैब में आउटपुट करता है .. शायद यह एक त्रुटि के मामले में लाल को उजागर करना पसंद कर सकता है?


कुछ बातें: अपने कोड वर्तमान में, अनंत लूप में चलता है जब से तुम को बढ़ा देते कभी नहीं xया y। आपने y=0दो बार असाइन किया, इसलिए आप पहला असाइनमेंट निकाल सकते हैं। वर्ग Colorया तो पूरी तरह से योग्य java.awt.Colorहोना चाहिए ( ) या आपको अपनी बाइट गिनती में आयात को शामिल करना होगा। और आपका कोड 4 वें परीक्षण मामले के लिए विफल रहता है (1 के बजाय 0 देता है)।
जस्टिन मैरिनर

मैं जानता हूँ कि यह एक समय हो गया है, लेकिन आप गोल्फ के लिए लूप भीतरी का कोष्ठक को हटाने, और बदलकर 6 बाइट्स कर सकते हैं &&करने के लिए &और ,y=0करने के लिए ,y: यह ऑनलाइन की कोशिश करो।
केविन क्रूज़सेन

6

सी #, 150 146 बाइट्स

b=>{int t=0,c=0,w=0,h;for(;w<b.Width;++w)for(h=0;h<b.Height;++t){var p=b.GetPixel(w,h++);if(p.R>191&p.G>191&p.B>191)c++;}return(int)(c/(t+0d)*8);}

बची 4 बाइट्स की बदौलत @ इयान एच।

पूर्ण / प्रारूपित संस्करण:

using System.Drawing;

namespace System
{
    class P
    {
        static void Main()
        {
            Func<Bitmap, int> f = b =>
            {
                int t = 0, c = 0, w = 0, h;
                for (; w < b.Width; ++w)
                    for (h = 0; h < b.Height; ++t)
                    {
                        var p = b.GetPixel(w, h++);

                        if (p.R > 191 & p.G > 191 & p.B > 191)
                            c++;
                    }

                return (int)(c / (t + 0d) * 8);
            };

            string[] testCases =
            {
                @"Appearance_of_sky_for_weather_forecast,_Dhaka,_Bangladesh.JPG",
                @"spanish-sky.jpeg",
                @"why-is-sky-blue-1.jpg",
            };

            foreach (string testCase in testCases)
            {
                using (Bitmap bitmap = new Bitmap(testCase))
                {
                    Console.WriteLine(f(bitmap));
                }
            }

            Console.ReadLine();
        }
    }
}

for(h=0 h<b.Height;++t)मुझे लगता है कि आप वहां एक अर्ध-
उपनिवेश से

2
आप कुछ बाइट्स को बचाने के लिए अंत में इसके /0.125साथ बदल सकते हैं *8
इयान एच।

@Cowsquack मैंने अंतरिक्ष के बजाय अर्ध बृहदान्त्र को हटा दिया! अभी तय किया है ।।
TheLethalCoder

3

सी #, 313 बाइट्स

namespace System.Drawing.Imaging{b=>{unsafe{int t=0,c=0,y=0,x,w=b.Width,h=b.Height;var d=b.LockBits(new Rectangle(0,0,w,h),(ImageLockMode)1,(PixelFormat)137224);for(;y<h;++y){var r=(byte*)d.Scan0+y*d.Stride;for(x=0;x<w*3;++t)if(r[x++]>191&r[x++]>191&r[x++]>191)c++;}b.UnlockBits(d);return(int)(c/(t+0d)/0.125);}}}

स्पष्ट रूप से मेरे अन्य उत्तर की तुलना में लंबे समय तक लेकिन यह एक मेमोरी में छवि को सीधे एक्सेस करने के लिए उपयोग LockBitsऔर unsafeकोड करता है ; जैसा कि यह अविश्वसनीय रूप से त्वरित है। मैं शायद कॉल को हटा सकता था, UnlockBitsलेकिन इसके साथ यह अधिक सही है।

पूर्ण / प्रारूपित संस्करण:

namespace System.Drawing.Imaging
{
    class P
    {
        static void Main()
        {
            Func<Bitmap, int> f = b =>
            {
                unsafe
                {
                    int t = 0, c = 0, y = 0, x, w = b.Width, h = b.Height;

                    var d = b.LockBits(new Rectangle(0, 0, w, h), (ImageLockMode)1, (PixelFormat)137224);
                    for (; y < h; ++y)
                    {
                        var r = (byte*)d.Scan0 + y * d.Stride;

                        for (x = 0; x < w * 3; ++t)
                            if (r[x++] > 191 & r[x++] > 191 & r[x++] > 191)
                                c++;
                    }
                    b.UnlockBits(d);

                    return (int)(c / (t + 0d) / 0.125);
                }
            };

            string[] testCases =
            {
                @"Appearance_of_sky_for_weather_forecast,_Dhaka,_Bangladesh.JPG",
                @"spanish-sky.jpeg",
                @"why-is-sky-blue-1.jpg",
            };

            foreach (string testCase in testCases)
            {
                using (Bitmap bitmap = new Bitmap(testCase))
                {
                    Console.WriteLine(f(bitmap));
                }
            }

            Console.ReadLine();
        }
    }
}

3

पॉवरशेल , 200 बाइट्स

$a=New-Object System.Drawing.Bitmap $args[0]
0..($a.Height-1)|%{$h=$_;0..($a.Width-1)|%{$i+=(("$($a.GetPixel($_,$h)|select R,G,B)"|iex)['R','G','B']-ge192).count-eq3}}
[int]($i/($a.Height*$a.Width)*8)

इनपुट हो जाता है $args[0]पूर्ण छवि फ़ाइल-पथ के रूप में करता है, एक New Bitmapवस्तु का निर्माण करता है$a । यह सिर्फ आंतरिक वस्तु का नाम है; यह JPG, PNG आदि का समर्थन करता है।

हम तब .heightऔर फिर .widthछवि के माध्यम से डबल-लूप करते हैं, प्रत्येक को छूते हुए pixel। हम R,G,Bमानों को बाहर निकालते हैं और फिर उन का चयन करते हैं जो -gपुन: उपयोग करने eयोग्य हैं192 और सुनिश्चित करें कि countहै 3(यानी, उन सभी को सफेद-ish हैं)। उस बूलियन परिणाम को हमारे संचायक में जोड़ा जाता है$i

हम तब प्रतिशत प्राप्त करने के लिए विभाजित करते हैं, इसे 8ओकटास की संख्या प्राप्त करने के लिए गुणा करते हैं , और फिर [int]केवल पूर्णांक आउटपुट प्राप्त करने के लिए। (ध्यान दें कि यह बैंकर की राउंडिंग करता है - यदि इसकी अनुमति नहीं है तो राउंडिंग विधि को बदलने के लिए कई और बाइट्स होंगे।)


2

डीसी, 74 बाइट्स

???*sa?[1+]ss[r1+r]st[?191<s]su0ddsd[0luxluxlux3=t1+dla>r]dsrxr8*la2/+la/p

इनपुट को पी 3 पीपीएम फ़ाइल के रूप में लिया गया है, जिसमें सभी व्हाट्सएप को नई लिस्ट के रूप में रखा गया है। आउटपुट STDOUT को है।

इसे ऑनलाइन आज़माएं!


2

जावास्क्रिप्ट, 83 77 बाइट्स

ETHproductions द्वारा -6 बाइट्स

f=i=>(z=a=b=0,i.map(e=>{z=e<192||z;(++b%4)||((z||(a+=64))&&(z=0))}),a/b+1>>1)

इनपुट

चित्र 1

चित्र # 2

चित्र # 3

चित्र # 4

डेमो


1
बहुत अच्छा समाधान है। ES6 तीर फ़ंक्शन के साथ एक आसान चाल कोष्ठक में सब कुछ लपेटने के लिए है, कॉमा द्वारा अलग ( या a=>(b,c,d)करने के बजाय) । यह तब तक काम करता है जब तक कि आपके पास किसी प्रकार का लूप न हो, जिस स्थिति में आप विधि का उपयोग करके संभवत: सर्वश्रेष्ठ हो जाएंगे । a=>{b;c;return d}a=>eval("b;c;d")eval
ETHproductions

2

सी (POSIX), 103 बाइट्स

स्टड पर बीएमपी फ़ाइल के रूप में इनपुट मानता है।

b,c,i,m=0xc0c0c0;main(){lseek(0,54,0);for(;read(0,&b,3);c+=(b&m)==m,i++);printf("%d",(i+16*c)/(2*i));}

2

x86 मशीन कोड, 34 बाइट्स

51
31 D2
AD
F7 D0
25 C0 C0 C0 00
75 01
42
E2 F3
C1 E2 03
DB 04 24
52
DB 04 24
DE F1
DB 1C 24
58
5A
C3

कोड के ये बाइट्स एक फ़ंक्शन को परिभाषित करते हैं जो बिटमैप इनपुट लेता है और एक पूर्णांक मान देता है जो इसके ओकटास को दर्शाता है। सी में के रूप में , सरणियों (जैसे बिटमैप) को पहले तत्व और एक आकार / लंबाई के लिए एक संकेतक के रूप में दर्शाया जाता है। इस प्रकार, यह फ़ंक्शन दो पैरामीटर लेता है: बिटमैप में पंक्तियों की कुल संख्या (पंक्तियाँ × कॉलम) और बिटमैप के लिए एक सूचक।

यह कोड एक कस्टम रजिस्टर-आधारित कॉलिंग कन्वेंशन का उपयोग करता है, जहां ESIरजिस्टर में बिटमैप पॉइंटर को पास किया जाता है और बिटमैप का आकार ECXरजिस्टर में पास किया जाता है । परिणाम (ओकटास), सामान्य रूप से, में लौटा हैEAX

जैसा कि पहले ही ऊपर कहा गया है, इनपुट को बिटमैप के रूप में लिया जाता है। विशेष रूप से, एक 32-bpp प्रारूप का उपयोग किया जाता है, थोड़ा-एंडियन प्रारूप में, लेकिन अल्फा चैनल (उच्चतम-क्रम बाइट) को अनदेखा किया जाता है। यह बहुत सी चीजों को सरल बनाता है, जिससे हम प्रत्येक पिक्सेल के माध्यम से पुनरावृति कर सकते हैं और इसके 32-बिट आरजीबी रंग मान की जांच कर सकते हैं। एक चतुर अनुकूलन भी यहाँ उपयोग किया जाता है। प्रत्येक रंग घटक को अलग करने और जाँचने के बजाय कि यह> = 192 है, हम केवल 0xC0C0C0 द्वारा पूरे 32-बिट मान को मुखौटा करते हैं और परीक्षण करते हैं कि क्या परिणाम है = = 0xC0C0C0। यह सभी "क्लाउड" रंगों के लिए सही और सभी "आकाश" (गैर-क्लाउड) रंगों के लिए गलत का मूल्यांकन करेगा। कुंआ, मैं सोचा कि यह चतुर था! :-) यह निश्चित रूप से बड़ी संख्या में बाइट बचाता है।

इसलिए, इस कोड का परीक्षण करने के लिए, आपको इनपुट छवियों को 32-bpp बिटमैप पर कनवर्ट करना होगा। आप इसके लिए विंडोज पेंट का उपयोग नहीं कर सकते, क्योंकि यह अधिकतम 24 बिट्स-प्रति-पिक्सेल का समर्थन करता है। हालांकि, कई अन्य सॉफ़्टवेयर समाधान हैं जो इसे कर सकते हैं, जैसे कि एडोब फोटोशॉप। मैंने इस मुफ्त टूल का उपयोग किया , जो विंडोज पर एक पीएनजी को 32-बीपीपी बीएमपी में परिवर्तित करता है, जिसका अर्थ है कि आपको केवल जेपीईजी से पीएनजी (जो पेंट कर सकते हैं) में कनवर्ट करने की आवश्यकता है।

अन्य धारणाएं जो मैं प्रस्तुत करता हूं, वे उचित हैं:

  • माना जाता है कि बिटमैप का आकार 0 से अधिक है ( यानी , इसमें कम से कम एक पिक्सेल शामिल है)। यह उचित है क्योंकि, जब वे आकाश शून्य होते हैं, तो हमें मौसम विज्ञान से बड़ी समस्याएं होती हैं।
  • दिशा ध्वज ( DF) को स्पष्ट माना जाता है ताकि हम बिटमैप के माध्यम से सही ढंग से पुनरावृति करेंगेLODSD निर्देश । यह ज्यादातर x86 कॉलिंग कन्वेंशनों द्वारा बनाई गई एक ही धारणा है, इसलिए यह उचित लगता है। यदि आपको यह पसंद नहीं है, तो एक के लिए गिनती में 1 बाइट जोड़ेंCLD निर्देश के ।
  • X87 FPU के लिए राउंडिंग मोड को राउंड-टू-पास-सम-सेट पर सेट किया गया है। यह सुनिश्चित करता है कि जब हम परीक्षण के मामले # 4 द्वारा सत्यापित किए गए अस्थायी अस्थायी बिंदु से अंतिम पूर्णांक परिणाम तक ओकटास की संख्या में परिवर्तित करते हैं, तो हमें सही व्यवहार मिलता है। यह धारणा उचित है क्योंकि यह एफपीयू के लिए डिफ़ॉल्ट स्थिति है और इसे सी कोड में भी बनाए रखना आवश्यक है (जहां ट्रंकेशन डिफ़ॉल्ट राउंडिंग व्यवहार है, मजबूर करने वाले कंपाइलर जो निष्क्रिय कोड उत्पन्न करने के लिए मानक-अनुरूप होना चाहते हैं जो राउंडिंग को बदल देता है मोड, रूपांतरण करता है, और फिर गोलाई मोड को वापस बदलता है)।

असेंबली असेंबली mnemonics:

; int ComputeOktas(void*    bmpBits  /* ESI */,
;                  uint32_t bmpSize  /* ECX */);
   push  ecx                  ; save size on stack
   xor   edx, edx             ; EDX = 0 (cloudy pixel counter)

CheckPixels:
   lodsd                      ; EAX = DS:[ESI]; ESI += 4
   not   eax
   and   eax, 0x00C0C0C0
   jnz   NotCloudy
   inc   edx
NotCloudy:
   loop  CheckPixels          ; ECX -= 1; loop if ECX > 0

   shl    edx, 3              ; counter *= 8
   fild   DWORD PTR [esp]     ; load original size from stack
   push   edx
   fild   DWORD PTR [esp]     ; load counter from stack
   fdivrp st(1), st(0)        ; ST(0) = counter*8 / size
   fistp  DWORD PTR [esp]     ; convert to integer, rounding to nearest even
   pop    eax                 ; load result
   pop    edx
   ret

निश्चित रूप से आपने इसे इस तरह से नीचे नहीं बनाया है और अभी भी सोच रहे हैं कि कोड कैसे काम करता है? :-)
खैर, यह बहुत आसान है। हम एक समय में बिटमैप एक 32-बिट मान के माध्यम से पुनरावृत्ति करते हैं, यह देखने के लिए कि क्या पिक्सेल आरजीबी मूल्य "बादल" या "बादल नहीं" है। यदि यह बादल है, तो हम अपने पूर्व-शून्य काउंटर को बढ़ाते हैं। अंत में, हम गणना: बादल छाए रहेंगे पिक्सल / कुल पिक्सेल  × 8
(जो के बराबर है: बादल छाए रहेंगे पिक्सल / कुल पिक्सेल  ÷ 0.125)।

इनपुट छवियों की आवश्यकता के कारण मैं इसके लिए TIO लिंक शामिल नहीं कर सकता। हालाँकि, मैं आपको उस वीणा के साथ प्रदान कर सकता हूँ जिसका मैंने विंडोज पर परीक्षण किया था:

#include <stdio.h>
#include <assert.h>
#include <Windows.h>

int main()
{
   // Load bitmap as a DIB section under Windows, ensuring device-neutrality
   // and providing us direct access to its bits.
   HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,
                                        TEXT("C:\\...\\test1.bmp"),
                                        IMAGE_BITMAP,
                                        0, 0,
                                        LR_LOADFROMFILE  | LR_CREATEDIBSECTION);
   assert(hBitmap != NULL);

   // Get the bitmap's bits and attributes.
   DIBSECTION dib;
   GetObject(hBitmap, sizeof(dib), &dib);
   assert(dib.dsBm.bmBitsPixel == 32);
   uint32_t cx = dib.dsBm.bmWidth;
   uint32_t cy = abs(dib.dsBm.bmHeight);
   uint32_t sz = cx * cy;
   assert(sz > 0);

   int oktas = ComputeOktas(sz, dib.dsBm.bmBits);

   printf("%d\n", oktas);

   return 0;
}

हालांकि, इसके साथ सावधान रहें! जैसा कि ऊपर परिभाषित किया गया है, ComputeOktasएक कस्टम कॉलिंग कन्वेंशन का उपयोग करता है, जो एक सी कंपाइलर का सम्मान नहीं करेगा। आपको अपेक्षित रजिस्टरों में स्टैक से मानों को लोड करने के लिए असेंबली भाषा प्रक्रिया के शीर्ष पर कोड जोड़ने की आवश्यकता है, जैसे :

mov  ecx, DWORD PTR [bmpSize]
mov  esi, DWORD PTR [bmpBits]

1

जावास्क्रिप्ट (ईएस 6), 218 बाइट्स

(a,c=document.createElement`canvas`,w=c.width=a.width,h=c.height=a.height,x=c.getContext`2d`)=>x.drawImage(a,0,0)||x.getImageData(0,0,w,h).data.reduce((o,_,i,d)=>o+(i%4|d[i++]<192|d[i++]<192|d[i]<192?0:1),0)/w/h*8+.5|0

एक Imageवस्तु को इनपुट के रूप में लेता है , जिसे एक <image>तत्व से बनाया जा सकता है।

यहाँ CodePen पर यह परीक्षण!

विकल्प

यदि इनपुट को आरजीबीए मानों के फ्लैट सरणी के रूप में लिया जा सकता है, तो आयामों के साथ: 82 बाइट्स

(d,w,h)=>d.reduce((o,_,i)=>o+(i%4|d[i++]<192|d[i++]<192|d[i]<192?0:1),0)/w/h*8+.5|0

यह इनपुट प्रारूप बहुत कुछ वैसा ही है जैसा कि मेटा पर यह उत्तर बताता है।


1

मैथेमेटिका 89 बाइट्स

निम्नलिखित चित्र को चित्रित करता है और बादलों के अंश का निर्धारण करता है, अर्थात सफेद पिक्सेल। फिर यह निर्धारित करता है कि परिणाम कितनी बार .125 फिट बैठता है। यह उस मूल्य का फर्श लौटाता है।

o@i_:=⌊8Tr@Flatten[ImageData@MorphologicalBinarize[i,.932],1]/Times@@ImageDimensions@i⌋
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.