cv2
পাইথন ওপেনসিভিতে আচ্ছাদনযুক্ত কোনও চিত্রের আকার কীভাবে পাবেন (নমপি)। এটি ছাড়াও কি সঠিক উপায় আছে numpy.shape()
? আমি কীভাবে এই বিন্যাসের মাত্রা: (প্রস্থ, উচ্চতা) তালিকায় পেতে পারি?
উত্তর:
cv2
ব্যবহারসমূহ numpy
সাধিত ইমেজ জন্য, তাই সঠিক এবং সবচেয়ে ভালো উপায় একটি ইমেজ আকার ব্যবহার করছে পেতে numpy.shape
। ধরে নিই যে আপনি বিজিআর চিত্র নিয়ে কাজ করছেন, এখানে একটি উদাহরণ রয়েছে:
>>> 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
। দুর্ভাগ্যক্রমে, এটি 3 বা 2 উপাদান দীর্ঘ হতে পারে।