"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > OpenCV के साथ छवि संपीड़न के लिए संपूर्ण मार्गदर्शिका

OpenCV के साथ छवि संपीड़न के लिए संपूर्ण मार्गदर्शिका

2024-11-08 को प्रकाशित
ब्राउज़ करें:960

कंप्यूटर विज़न में छवि संपीड़न एक महत्वपूर्ण तकनीक है जो हमें दृश्य गुणवत्ता बनाए रखते हुए छवियों को अधिक कुशलता से संग्रहीत और प्रसारित करने की अनुमति देती है। आदर्श रूप से, हम सर्वोत्तम गुणवत्ता वाली छोटी फ़ाइलें रखना पसंद करेंगे। हालाँकि, हमें समझौता करना होगा और निर्णय लेना होगा कि कौन सा अधिक महत्वपूर्ण है।

यह ट्यूटोरियल सिद्धांत और व्यावहारिक अनुप्रयोगों को कवर करते हुए ओपनसीवी के साथ छवि संपीड़न सिखाएगा। अंत तक, आप समझ जाएंगे कि कंप्यूटर विज़न प्रोजेक्ट (या आपके पास मौजूद किसी भी अन्य प्रोजेक्ट) के लिए फ़ोटो को सफलतापूर्वक कैसे संपीड़ित किया जाए।

छवि संपीड़न क्या है?

छवि संपीड़न दृश्य गुणवत्ता के स्वीकार्य स्तर को बनाए रखते हुए छवि के फ़ाइल आकार को कम कर रहा है। संपीड़न के दो मुख्य प्रकार हैं:

  1. दोषरहित संपीड़न: सभी मूल डेटा को संरक्षित करता है, सटीक छवि पुनर्निर्माण की अनुमति देता है।
  2. हानिपूर्ण संपीड़न: छोटे फ़ाइल आकार प्राप्त करने के लिए कुछ डेटा को त्याग देता है, जिससे छवि गुणवत्ता संभावित रूप से कम हो जाती है।

छवियाँ संपीड़ित क्यों करें?

यदि "डिस्क स्थान सस्ता है," जैसा कि हम अक्सर सुनते हैं, तो छवियों को संपीड़ित क्यों करें? छोटे पैमाने पर, छवि संपीड़न ज्यादा मायने नहीं रखता, लेकिन बड़े पैमाने पर, यह महत्वपूर्ण है।

उदाहरण के लिए, यदि आपकी हार्ड ड्राइव पर कुछ छवियां हैं, तो आप उन्हें संपीड़ित कर सकते हैं और कुछ मेगाबाइट डेटा बचा सकते हैं। जब हार्ड ड्राइव को टेराबाइट्स में मापा जाता है तो इसका अधिक प्रभाव नहीं पड़ता है। लेकिन क्या होगा यदि आपकी हार्ड ड्राइव पर 100,000 छवियां हों? कुछ बुनियादी संपीड़न वास्तविक समय और पैसा बचाता है। प्रदर्शन के दृष्टिकोण से, यह वैसा ही है। यदि आपके पास बहुत सारी छवियों वाली वेबसाइट है और प्रतिदिन 10,000 लोग आपकी वेबसाइट पर आते हैं, तो संपीड़न मायने रखता है।

यहां बताया गया है कि हम ऐसा क्यों करते हैं:

  • भंडारण आवश्यकताएं कम की गईं: एक ही स्थान में अधिक छवियां संग्रहीत करें
  • तेज ट्रांसमिशन: वेब अनुप्रयोगों और बैंडविड्थ-बाधित परिदृश्यों के लिए आदर्श
  • प्रसंस्करण गति में सुधार: छोटी छवियां लोड करने और संसाधित करने में तेज़ होती हैं

छवि संपीड़न के पीछे सिद्धांत

छवि संपीड़न तकनीक दो प्रकार की अतिरेक का फायदा उठाती है:

  1. स्थानिक अतिरेक: पड़ोसी पिक्सेल के बीच सहसंबंध
  2. रंग अतिरेक: निकटवर्ती क्षेत्रों में रंग मूल्यों की समानता

स्थानिक अतिरेक इस तथ्य का लाभ उठाता है कि अधिकांश प्राकृतिक छवियों में पड़ोसी पिक्सेल का मान समान होता है। यह सहज परिवर्तन बनाता है. कई तस्वीरें "वास्तविक लगती हैं" क्योंकि एक क्षेत्र से दूसरे क्षेत्र तक प्राकृतिक प्रवाह होता है। जब पड़ोसी पिक्सेल के मान अत्यधिक भिन्न होते हैं, तो आपको "शोर" वाली छवियां मिलती हैं। पिक्सेल को एक ही रंग में समूहित करके उन बदलावों को कम "सुचारू" बनाने के लिए पिक्सेल बदल दिए गए, जिससे छवि छोटी हो गई।

The Complete Guide to Image Compression with OpenCV

रंग अतिरेक, दूसरी ओर, इस बात पर ध्यान केंद्रित करता है कि किसी छवि में आसन्न क्षेत्र अक्सर समान रंग कैसे साझा करते हैं। नीले आकाश या हरे मैदान के बारे में सोचें - छवि के बड़े हिस्से में बहुत समान रंग मान हो सकते हैं। जगह बचाने के लिए उन्हें एक साथ समूहीकृत किया जा सकता है और एक ही रंग में बनाया जा सकता है।

The Complete Guide to Image Compression with OpenCV

OpenCV इन विचारों के साथ काम करने के लिए ठोस उपकरण प्रदान करता है। स्थानिक अतिरेक का उपयोग करते हुए, OpenCV का cv2.inpaint() फ़ंक्शन, उदाहरण के लिए, आस-पास के पिक्सेल से जानकारी का उपयोग करके चित्र के लापता या क्षतिग्रस्त क्षेत्रों को भरता है। OpenCV डेवलपर्स को रंग अतिरेक के संबंध में कई रंग स्थानों के बीच छवियों का अनुवाद करने के लिए cv2.cvtColor() का उपयोग करने देता है। यह कई संपीड़न तकनीकों में प्रीप्रोसेसिंग चरण के रूप में कुछ हद तक सहायक हो सकता है क्योंकि कुछ रंग स्थान विशेष प्रकार की छवियों को एन्कोड करने में दूसरों की तुलना में अधिक प्रभावी होते हैं।

अब हम इस सिद्धांत में से कुछ का परीक्षण करेंगे। आइए इसके साथ खेलें.

छवि संपीड़न पर हाथ

आइए जानें कि ओपनसीवी के पायथन बाइंडिंग का उपयोग करके छवियों को कैसे संपीड़ित किया जाए। इस कोड को लिखें या कॉपी करें:

आप यहां स्रोत कोड भी प्राप्त कर सकते हैं

import cv2
import numpy as np

def compress_image(image_path, quality=90):
    # Read the image
 img = cv2.imread(image_path)
    
    # Encode the image with JPEG compression
 encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), quality]
 _, encoded_img = cv2.imencode('.jpg', img, encode_param)
    
    # Decode the compressed image
 decoded_img = cv2.imdecode(encoded_img, cv2.IMREAD_COLOR)
    
    return decoded_img

# Example usage
original_img = cv2.imread('original_image.jpg')
compressed_img = compress_image('original_image.jpg', quality=50)

# Display results
cv2.imshow('Original', original_img)
cv2.imshow('Compressed', compressed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# Calculate compression ratio
original_size = original_img.nbytes
compressed_size = compressed_img.nbytes
compression_ratio = original_size / compressed_size
print(f"Compression ratio: {compression_ratio:.2f}")

इस उदाहरण में एक कॉम्प्रेस_इमेज फ़ंक्शन शामिल है जो दो पैरामीटर लेता है:

  • छवि पथ (जहां छवि स्थित है)
  • गुणवत्ता (इच्छित छवि की गुणवत्ता)

फिर, हम मूल छवि को basic_img में लोड करेंगे। फिर हम उसी छवि को 50% तक संपीड़ित करते हैं और इसे एक नए उदाहरण, संपीड़ित_इमेज में लोड करते हैं।

फिर हम मूल और संपीड़ित छवियां दिखाएंगे ताकि आप उन्हें एक साथ देख सकें।

फिर हम संपीड़न अनुपात की गणना और प्रदर्शन करते हैं।

यह उदाहरण दर्शाता है कि OpenCV में JPEG संपीड़न का उपयोग करके किसी छवि को कैसे संपीड़ित किया जाए। गुणवत्ता पैरामीटर फ़ाइल आकार और छवि गुणवत्ता व्यापार को नियंत्रित करता है।

आइए इसे चलाएं:

The Complete Guide to Image Compression with OpenCV

शुरुआत में छवियों को देखने पर, आपको थोड़ा अंतर दिखाई देता है। हालाँकि, ज़ूम इन करने पर आपको गुणवत्ता में अंतर दिखाई देता है:

The Complete Guide to Image Compression with OpenCV

और विंडोज़ बंद करने और फ़ाइलों को देखने के बाद, हम देख सकते हैं कि फ़ाइल का आकार नाटकीय रूप से कम हो गया था:

The Complete Guide to Image Compression with OpenCV

इसके अलावा, अगर हम इसे और कम करते हैं, तो हम अपनी गुणवत्ता को 10% तक बदल सकते हैं

compressed_img = compress_image('sampleimage.jpg', quality=10)

और परिणाम बहुत अधिक कठोर हैं:

The Complete Guide to Image Compression with OpenCV

और फ़ाइल आकार के परिणाम भी अधिक कठोर हैं:

The Complete Guide to Image Compression with OpenCV

आप इन मापदंडों को काफी आसानी से समायोजित कर सकते हैं और गुणवत्ता और फ़ाइल आकार के बीच वांछित संतुलन प्राप्त कर सकते हैं।

संपीड़न गुणवत्ता का मूल्यांकन

संपीड़न के प्रभाव का आकलन करने के लिए, हम जैसे मैट्रिक्स का उपयोग कर सकते हैं:

  1. मीन स्क्वैयर त्रुटि (MSE)

मीन स्क्वायर्ड एरर (एमएसई) मापता है कि दो छवियां एक-दूसरे से कितनी भिन्न हैं। जब आप किसी छवि को संपीड़ित करते हैं, तो एमएसई आपको यह निर्धारित करने में मदद करता है कि मूल की तुलना में संपीड़ित छवि कितनी बदल गई है।

यह दो छवियों में संबंधित पिक्सेल के रंगों के बीच अंतर का नमूना लेकर, उन अंतरों का वर्ग करके और उनका औसत निकालकर ऐसा करता है। परिणाम एक एकल संख्या है: कम एमएसई का मतलब है कि संपीड़ित छवि मूल के करीब है। इसकी तुलना में, उच्च एमएसई का मतलब है कि गुणवत्ता में अधिक ध्यान देने योग्य हानि है।

इसे मापने के लिए यहां कुछ पायथन कोड दिया गया है:

def calculate_mse(img1, img2):
    return np.mean((img1 - img2) ** 2)

mse = calculate_mse(original_img, compressed_img)
print(f"Mean Squared Error: {mse:.2f}")

हमारी डेमो छवि संपीड़न इस प्रकार दिखती है:

The Complete Guide to Image Compression with OpenCV

  1. पीक सिग्नल-टू-शोर अनुपात (पीएसएनआर)

पीक सिग्नल-टू-शोर अनुपात (पीएसएनआर) एक माप है जो दर्शाता है कि संपीड़न के बाद छवि की गुणवत्ता कितनी खराब हो गई है। यह अक्सर आपकी आँखों से दिखाई देता है, लेकिन यह एक निर्धारित मान निर्दिष्ट करता है। यह मूल छवि की तुलना संपीड़ित छवि से करता है और अंतर को अनुपात के रूप में व्यक्त करता है।

उच्च पीएसएनआर मान का मतलब है कि संपीड़ित छवि गुणवत्ता में मूल के करीब है, जो गुणवत्ता में कम हानि का संकेत देती है। कम पीएसएनआर का अर्थ है अधिक दृश्यमान गिरावट। पीएसएनआर का उपयोग अक्सर एमएसई के साथ किया जाता है, पीएसएनआर व्याख्या करने में आसान पैमाना प्रदान करता है जहां उच्चतर बेहतर होता है।

यहां कुछ पायथन कोड है जो मापता है:

def calculate_psnr(img1, img2):
 mse = calculate_mse(img1, img2)
    if mse == 0:
        return float('inf')
 max_pixel = 255.0
    return 20 * np.log10(max_pixel / np.sqrt(mse))

psnr = calculate_psnr(original_img, compressed_img)
print(f"PSNR: {psnr:.2f} dB")

हमारी डेमो छवि संपीड़न इस प्रकार दिखती है:

The Complete Guide to Image Compression with OpenCV

गुणवत्ता निर्धारित करने के लिए संपीड़न के बाद अपनी छवियों पर "आंखें घुमाना" ठीक है; हालाँकि, बड़े पैमाने पर, स्क्रिप्ट का ऐसा करना मानकों को निर्धारित करने और यह सुनिश्चित करने का एक बहुत आसान तरीका है कि छवियां उनका पालन करती हैं।

आइए कुछ अन्य तकनीकों पर नजर डालें:

उन्नत संपीड़न तकनीक

अधिक उन्नत संपीड़न के लिए, ओपनसीवी विभिन्न एल्गोरिदम का समर्थन करता है:

  1. पीएनजी संपीड़न:

आप अपनी छवियों को पीएनजी प्रारूप में परिवर्तित कर सकते हैं, जिसके कई फायदे हैं। कोड की निम्नलिखित पंक्ति का उपयोग करें, और आप अपनी आवश्यकताओं के आधार पर अपना संपीड़न 0 से 9 तक सेट कर सकते हैं। 0 का अर्थ है कोई भी संपीड़न नहीं, और 9 अधिकतम है। ध्यान रखें कि पीएनजी एक "दोषरहित" प्रारूप है, इसलिए अधिकतम संपीड़न पर भी, छवि बरकरार रहनी चाहिए। बड़ा समझौता फ़ाइल आकार और संपीड़न समय है।

ओपनसीवी के साथ पीएनजी संपीड़न का उपयोग करने के लिए कोड यहां दिया गया है:

cv2.imwrite('compressed.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 9])

और यहां हमारा परिणाम है:

The Complete Guide to Image Compression with OpenCV

नोट: आप कभी-कभी देख सकते हैं कि पीएनजी फ़ाइलें वास्तव में आकार में बड़ी होती हैं, जैसा कि इस मामले में है। यह छवि की सामग्री पर निर्भर करता है।

  1. वेबपी संपीड़न:

आप अपनी छवियों को .webp प्रारूप में भी परिवर्तित कर सकते हैं। यह संपीड़न की एक नई विधि है जो लोकप्रियता प्राप्त कर रही है। मैं वर्षों से अपने ब्लॉग पर छवियों पर इस संपीड़न का उपयोग कर रहा हूं।

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

ऐसा करने के लिए यहां पायथन कोड है:

cv2.imwrite('compressed.webp', img, [cv2.IMWRITE_WEBP_QUALITY, 80])

और यहां हमारा परिणाम है:

The Complete Guide to Image Compression with OpenCV

ये दो तकनीकें बड़ी मात्रा में डेटा को संपीड़ित करने के लिए बहुत अच्छी हैं। आप हजारों या सैकड़ों हजारों छवियों को स्वचालित रूप से संपीड़ित करने के लिए स्क्रिप्ट लिख सकते हैं।

निष्कर्ष

छवि संपीड़न शानदार है। यह कई मायनों में कंप्यूटर विज़न कार्यों के लिए आवश्यक है, विशेष रूप से स्थान बचाने या प्रसंस्करण गति बढ़ाने के लिए। जब भी आप हार्ड ड्राइव स्थान कम करना चाहते हैं या बैंडविड्थ बचाना चाहते हैं तो कंप्यूटर विज़न के बाहर भी कई उपयोग के मामले हैं। छवि संपीड़न से बहुत मदद मिल सकती है.

इसके पीछे के सिद्धांत को समझकर और इसे लागू करके, आप अपनी परियोजनाओं के साथ कुछ शक्तिशाली चीजें कर सकते हैं।

याद रखें, प्रभावी संपीड़न की कुंजी फ़ाइल आकार में कमी और आपके एप्लिकेशन के लिए स्वीकार्य दृश्य गुणवत्ता बनाए रखने के बीच सही स्थान ढूंढना है।

पढ़ने के लिए धन्यवाद, और यदि आपके पास कोई टिप्पणी या प्रश्न हो तो बेझिझक संपर्क करें!

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/jeremycmorgan/the-complete-guide-to-image-compression-with-opencv-2bld?1 यदि कोई उल्लंघन है, तो कृपया हटाने के लिए स्टडी_गोलंग@163.com पर संपर्क करें यह
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3