ओपनसीवी के बिना इमेज प्रोसेसिंग | अजगर

| | | | | | | | | | | | | | | | | |

हम जानते हैं कि ओपनसीवी का व्यापक रूप से छवियों के साथ काम करने के लिए उपयोग किया जाता है और इसके लिए कई प्रकार के कार्य हैं। लेकिन क्या होगा अगर हम ओपनसीवी जैसे किसी बाहरी पुस्तकालय का उपयोग किए बिना छवि फ़ाइलों को संसाधित करना चाहते हैं। आइए देखें कि हम यह कैसे कर सकते हैं।

छवि स्केलिंग (निकटतम पड़ोसी प्रक्षेप का उपयोग करके):

निकटतम पड़ोसी प्रक्षेप — यह प्रक्षेप करने का सबसे आसान तरीका है। यह विधि केवल "निकटतम" पड़ोसी पिक्सेल को निर्धारित करती है और इसकी तीव्रता के लिए एक मान लेती है।

एक छोटी छवि पर विचार करें जिसकी चौड़ाई w है और ऊंचाई — h जिसे हम p > मानकर चौड़ाई p से चौड़ाई q में बदलना चाहते हैं; एम और क्यू > एन। अब हमें दो स्केलिंग स्थिरांक की आवश्यकता है:

scale_x = p / w scale_y = q / h 

अब हम आउटपुट छवि के सभी पिक्सेल पर बस पुनरावृति करते हैं, मूल पिक्सेल का जिक्र करते हुए हम से नकल कर रहे हैं। हमारे नियंत्रण चरों को scale_x और scale_y के साथ स्केल करना, और परिणामी स्केल किए गए इंडेक्स मानों को गोल करना।

विज़ुअल प्रतिनिधित्व:
छवि 3X3 पिक्सेल (कुल 9 पिक्सेल) है, अब यदि हम छवि का आकार 6X6 तक बढ़ाना चाहते हैं, तो निकटतम पड़ोसी एल्गोरिथ्म के अनुसार 6/3 (अर्थात 2) पिक्सेल का RGB मान मान पिक्सेल के समान होना चाहिए मूल छवि के लिए।

इमेज स्केलिंग प्रोग्राम:


<टेबल बॉर्डर = "0" सेलपैडिंग =" 0 "सेलस्पेसिंग =" 0 ">

# matplotlib और numpy का उपयोग करके

<कोड वर्ग = "कीवर्ड"> आयात <कोड वर्ग = "सादा"> matplotlib.image as img

<कोड वर्ग = " कीवर्ड"> आयात <कोड वर्ग = "सादा"> npy के रूप में सुन्न


<कोड वर्ग = "टिप्पणियां"> # पढ़ने योग्य छवि स्थान प्रदान करें

<कोड वर्ग = "सादा"> एम <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> img.imread ( <कोड वर्ग = "स्ट्रिंग"> "taj.png " <कोड वर्ग = "सादा">);


# असली इमेज की लंबाई को परिभाषित करना

w , एच <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> एम आकार [: <कोड वर्ग = "मान"> 2 < कोड वर्ग = "सादा">];


# xNew और yNew नई चौड़ाई हैं और
# इमेज की ऊंचाई जरूरी है
<कोड वर्ग = "सादा"> स्केलिंग के बाद

< कोड वर्ग = "सादा" > xNew <कोड वर्ग = "कीवर्ड"> = int (w * 1 <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">);

yNew = int <कोड वर्ग = "सादा"> (एच <कोड वर्ग = "कीवर्ड"> * <कोड वर्ग = "मान"> 1 <कोड वर्ग = "कीवर्ड"> / < / कोड> <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">);


# स्केलिंग फैक्टर की गणना करें
# 2 पिक्सल से ज्यादा काम करें कोड>

<कोड वर्ग = "सादा"> xScale <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> xNew <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "सादा"> (डब्ल्यू <कोड वर्ग = "कीवर्ड"> - <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">);

yScale = yNew <कोड क्लास = "कीवर्ड"> / <कोड क्लास = "प्लेन"> (एच <कोड क्लास = "कीवर्ड"> - <कोड क्लास = "वैल्यू"> 1 < / कोड> <कोड वर्ग = "सादा">);


# numpy का उपयोग करते हुए, xNew मैट्रिक्स ले रहे हैं
# चौड़ाई और नई ऊंचाई
# 4 विशेषताएँ [alpha, B, G, B] मान ‚Äã‚Äã

newImage = npy.zeros ([xNew, yNew, 4 <कोड वर्ग = "सादा">]);


के लिए i in < में / कोड> <कोड वर्ग = "कार्य"> श्रेणी <कोड वर्ग = "सादा"> (xNew <कोड वर्ग = "कीवर्ड"> - <कोड वर्ग = "मान" > 1 <कोड वर्ग = "सादा">):

<कोड वर्ग ="कीवर्ड "> के लिए <कोड वर्ग = "सादा"> j in range (yNew - <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">):

<कोड वर्ग = "सादा"> newImage [ मैं <कोड वर्ग = "कीवर्ड"> + <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">, जे <कोड वर्ग = " कीवर्ड"> + <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> एम [ <कोड वर्ग = "मान"> 1 <कोड वर्ग = "कीवर्ड"> + <कोड वर्ग = "func tions"> int (i / xScale),

1 + int (जे <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "सादा"> yScale)]


<कोड class = "comments"> # स्केलिंग के बाद इमेज सेव करें

img.imsave ( `scaled.png) ` <कोड वर्ग = "सादा">, newImage);

आउटपुट:

छवि को ग्रेस्केल करें:

माध्य का उपयोग करना मूल्य पद्धति, यह विधि एक पिक्सेल की तीव्रता पर जोर देती है, बजाय यह दिखाने के कि RGB मान किससे बना है। जब हम औसत RGB मान की गणना करते हैं और इसे पिक्सेल के लिए RGB मान निर्दिष्ट करते हैं, क्योंकि पिक्सेल का RGB मान समान होता है, तो यह कोई रंग नहीं बना पाएगा, क्योंकि सभी रंग RGB के अलग-अलग अनुपात के कारण उत्पन्न होते हैं। मान, क्योंकि इस मामले में अनुपात 1: 1: 1 होगा। इसलिए, रेंडर की गई इमेज एक स्लेटी रंग की इमेज की तरह दिखेगी.

विज़ुअल प्रतिनिधित्व:

ग्रेस्केल इमेज प्रोग्राम:


# NumPy का उपयोग कर

import npy के रूप में सुन्न


# matplotlib का उपयोग कर

आयात <कोड वर्ग = "सादा"> img के रूप में matplotlib.image

<कोड वर्ग = "अपरिभाषित रिक्त स्थान">
<कोड वर्ग = "टिप्पणियां"> # औसत आयात करने के लिए आंकड़ों का उपयोग करें

<कोड वर्ग = "टिप्पणियां"> # औसत की गणना करने के लिए

<कोड वर्ग = "कीवर्ड"> से <कोड वर्ग = "सादा"> आँकड़े <कोड वर्ग = "कीवर्ड"> आयात <कोड वर्ग = "सादा"> मतलब


<कोड वर्ग = "सादा"> एम <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> img.imread ( <कोड वर्ग = "स्ट्रिंग "> "taj.png" )


# की चौड़ाई और ऊंचाई को परिभाषित करें मूल छवि

w, h = m .shape [: 2 ]


# नया छवि आयाम प्रति पिक्सेल 4 विशेषताओं के साथ

newImage = npy.zeros ([w, h, 4 ])

<कोड वर्ग = "कीवर्ड"> प्रिंट <कोड वर्ग = "सादा"> (डब्ल्यू)

<कोड वर्ग = "कीवर्ड"> प्रिंट <कोड वर्ग = "सादा"> (एच)


<कोड वर्ग = "कीवर्ड"> के लिए <कोड वर्ग = "सादा"> मैं कोड> in range (w):

< कोड वर्ग = "कीवर्ड"> के लिए <कोड वर्ग = "सादा"> जे <कोड वर्ग = "कीवर्ड"> में > <कोड वर्ग = "सादा"> (एच):

<कोड वर्ग = "टिप्पणियां"> # RGB अनुपात 0 और 1 के बीच होगा

< पी > <कोड क्लास एसएस = "सादा"> एलएसटी <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> [ <कोड वर्ग = "कार्य"> फ्लोट <कोड वर्ग = "सादा"> (एम [i] [जे] [ <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">]), <कोड वर्ग = "फ़ंक्शंस"> फ्लोट <कोड वर्ग = "सादा"> (एम [i] [जे] [ <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">]), <कोड वर्ग = "कार्य"> फ्लोट <कोड वर्ग = "सादा"> (एम [i] [जे] [ 2 ])]

औसत <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "कार्य"> फ्लोट <कोड वर्ग = "सादा"> (माध्य (एलएसटी) )

newImage [i] [j] [ 0 ] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> औसत

<कोड वर्ग = "सादा"> newImage [i] [j] [ 1 ] = <कोड वर्ग = "सादा"> औसत

<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> <कोड वर्ग = "सादा"> नया छवि [i] [जे] [< /कोड> <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> औसत

<कोड वर्ग = "सादा" > newImage [i] [j] [ <कोड वर्ग = "मान"> 3 <कोड वर्ग = " सादा">] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "मान"> 1 <कोड वर्ग = "टिप्पणियां"> # अल्फा मान होना चाहिए 1


# इमेज सेव करके imsave

img.imsave ( `grayedImage.png` , newImage)

< /tbody>

आउटपुट:

छवि को क्रॉप करना:

क्रॉपिंग मूल रूप से हटा देता है अवांछित पिक्सेल। यह आवश्यक पिक्सेल को छवियों के किसी अन्य ग्रिड में रखकर किया जा सकता है, जिसका आकार क्रॉप करने के बाद आवश्यक से मेल खाता है।

10 ó 10 पिक्सेल के आकार वाली छवि पर विचार करें, और यदि हम केवल 4 ó 4 पिक्सेल के आकार के साथ एक छवि के केंद्र को क्रॉप करना चाहते हैं, फिर हमें पिक्सेल मान (10-4) / 2 से, (3, 3) से शुरू होकर 4 पिक्सेल तक एकत्र करने की आवश्यकता है। x दिशा में और 4 पिक्सेल y दिशा में।

दृश्य प्रतिनिधित्व:

<आकृति वर्ग = aligncenter amp-wp-inline-3e51218d663451eff35d5e808dc532fc>

इमेज क्रॉपर:


<कोड>

# matplotlib और numpy का उपयोग करना

import matplotlib.image as img

import numpy as npy


# वेरिएबल m में इमेज पढ़ें

m = <कोड वर्ग = "सादा"> img.imread ( "taj.png" )


<कोड वर्ग = "टिप्पणियां"> # छवि आकार चौड़ाई की परिभाषा (डब्ल्यू) ऊंचाई (एच)

<कोड वर्ग = "सादा"> डब्ल्यू, एच <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> m.shape [: <कोड वर्ग = "मान"> 2 <कोड वर्ग = "सादा">]


<कोड वर्ग = "टिप्पणियां"> # क्रॉप करने के बाद आवश्यक छवि आकार

<कोड वर्ग = "सादा"> xNew <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "कार्य" > int (w * 1 / <कोड वर्ग = "मान"> 4 <कोड वर्ग = "सादा">)

<कोड वर्ग = "सादा" > yNew = int (h * <कोड क्लास = "वैल्यू"> 1 <कोड क्लास = "कीवर्ड"> / <कोड क्लास = "वैल्यू"> 4 <कोड वर्ग = "सादा">)

कोड वर्ग = "सादा"> नया छवि <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा" "> npy.zeros ([xNew, yNew, 4 ])


# प्रिंट चौड़ाई स्रोत छवि ऊंचाई

प्रिंट <कोड क्लास =" प्लेन "> (w)

<कोड क्लास = "कीवर्ड"> प्रिंट <कोड क्लास = "प्लेन" > (एच)


<कोड वर्ग = "कीवर्ड"> के लिए <कोड वर्ग = "सादा"> i <कोड वर्ग = "कीवर्ड" "> में <कोड वर्ग = "कार्य"> श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">, xNew):

for जे <कोड क्लास = "कीवर्ड"> <कोड क्लास = "फ़ंक्शंस"> रेंज <कोड क्लास = "प्लेन"> ( <कोड क्लास) ="value "> 1 , yNew):

# मूल छवि के 100 से 100 पिक्सेल तक क्रॉप करें

<कोड वर्ग = "सादा"> newImage [i, j] <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> एम [< /कोड> <कोड वर्ग = "मान"> 100 <कोड वर्ग = "कीवर्ड"> + <कोड वर्ग = "सादा"> मैं, <कोड वर्ग = "मान" > 100 <कोड वर्ग = "कीवर्ड"> + <कोड वर्ग = "सादा"> जे]


<कोड वर्ग = "टिप्पणियां" > # इमेज सेव करें

img.imsave ( `cropped.png` < कोड वर्ग = "सादा">, newImage)

आउटपुट: