छवि का आकार पाने के लिए अजगर OpenCV2 (cv2) आवरण?


97

cv2पायथन ओपनसीवी (संख्यात्मक) में आवरण में एक छवि का आकार कैसे प्राप्त करें । क्या इसके अलावा कोई अन्य तरीका है numpy.shape()। मैं इसे इन प्रारूप आयामों में कैसे प्राप्त कर सकता हूं: (चौड़ाई, ऊंचाई) सूची?


1
numpy.shapeकॉल करने योग्य नहीं है। यह सिर्फ एक मैदान है tuple। Unfortunatelly, यह 3 या 2 तत्वों लंबा हो सकता है।
टॉमस गैंडर

जवाबों:


210

cv2numpyछवियों में हेरफेर करने के लिए उपयोग करता है , इसलिए एक छवि का आकार प्राप्त करने का उचित और सबसे अच्छा तरीका उपयोग कर रहा है numpy.shape। मान लें कि आप BGR छवियों के साथ काम कर रहे हैं, यहाँ एक उदाहरण है:

>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
  600 800 3

यदि आप द्विआधारी छवियों के साथ काम कर रहे थे, imgतो दो आयाम होंगे, और इसलिए आपको कोड बदलना होगा:height, width = img.shape


23
ओह अब छोड़िए भी। यह मानने के बजाय कि छवि बीजीआर या मोनो होगी, बस आम तौर पर लिखें - h, w = img.shape[:2]विशेष रूप से ओपी को गहराई में दिलचस्पी नहीं है। (मैं भी नहीं था)। अधिक जानकारी के लिए मेरा जवाब देखें।
टॉमस गैंडर

1
मुझे यह मददगार लगा: docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/…
djwbrown

19

मुझे डर है कि इस आकार को प्राप्त करने के लिए कोई "बेहतर" तरीका नहीं है, हालांकि यह इतना दर्द नहीं है।

बेशक आपका कोड बाइनरी / मोनो छवियों के साथ-साथ मल्टी-चैनल वाले दोनों के लिए सुरक्षित होना चाहिए, लेकिन छवि के प्रमुख आयाम हमेशा संख्यात्मक सरणी में पहले आते हैं। यदि आप पठनीयता का विकल्प चुनते हैं, या इसे टाइप करने की जहमत नहीं उठाना चाहते हैं, तो आप इसे एक फ़ंक्शन में लपेट सकते हैं, और इसे एक नाम दे सकते हैं जिसे आप पसंद करते हैं, जैसे cv_size:

import numpy as np
import cv2

# ...

def cv_size(img):
    return tuple(img.shape[1::-1])

यदि आप एक टर्मिनल / आईपाइथन पर हैं, तो आप इसे लैम्बडा के साथ भी व्यक्त कर सकते हैं:

>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)

defअंतःक्रियात्मक रूप से काम करते हुए लेखन कार्य मजेदार नहीं है।

संपादित करें

मूल रूप से मैंने सोचा था कि उपयोग करना [:2]ठीक था, लेकिन संख्यात्मक आकार है (height, width[, depth]), और हमें उम्मीद है, (width, height)जैसे कि cv2.resizeउम्मीद है, इसलिए - हमें इसका उपयोग करना चाहिए [1::-1]। से भी कम यादगार है [:2]। और वैसे भी रिवर्स स्लाइसिंग किसे याद है?


1
शायद बहुत उपयोगी नहीं है, लेकिन आप इसे भी काट सकते हैंimg.shape[:2][::-1]
billyjmc

13
आपके सूचकांक कोष्ठक में कॉलोन के साथ प्यार करने का कोई कारण नहीं है। वापसी (इमेज.शैप [1], इमेज.शैप [0]) सक्सेसफुल और पठनीय दोनों है।
mcduffee
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.