जवाबों:
cv2
numpy
छवियों में हेरफेर करने के लिए उपयोग करता है , इसलिए एक छवि का आकार प्राप्त करने का उचित और सबसे अच्छा तरीका उपयोग कर रहा है 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
h, w = img.shape[:2]
विशेष रूप से ओपी को गहराई में दिलचस्पी नहीं है। (मैं भी नहीं था)। अधिक जानकारी के लिए मेरा जवाब देखें।
मुझे डर है कि इस आकार को प्राप्त करने के लिए कोई "बेहतर" तरीका नहीं है, हालांकि यह इतना दर्द नहीं है।
बेशक आपका कोड बाइनरी / मोनो छवियों के साथ-साथ मल्टी-चैनल वाले दोनों के लिए सुरक्षित होना चाहिए, लेकिन छवि के प्रमुख आयाम हमेशा संख्यात्मक सरणी में पहले आते हैं। यदि आप पठनीयता का विकल्प चुनते हैं, या इसे टाइप करने की जहमत नहीं उठाना चाहते हैं, तो आप इसे एक फ़ंक्शन में लपेट सकते हैं, और इसे एक नाम दे सकते हैं जिसे आप पसंद करते हैं, जैसे 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]
। और वैसे भी रिवर्स स्लाइसिंग किसे याद है?
img.shape[:2][::-1]
numpy.shape
कॉल करने योग्य नहीं है। यह सिर्फ एक मैदान हैtuple
। Unfortunatelly, यह 3 या 2 तत्वों लंबा हो सकता है।