ใน Python มีหลายไลบรารีสำหรับจัดการรูปภาพ เช่น OpenCV และ Pillow (PIL) ส่วนนี้อธิบายวิธีรับขนาดรูปภาพ (ความกว้างและความสูง) สำหรับแต่ละขนาด
คุณสามารถรับขนาดรูปภาพ (ความกว้างและความสูง) เป็นทูเพิลโดยใช้รูปร่างสำหรับ OpenCV และขนาดสำหรับหมอน (PIL) แต่โปรดทราบว่าลำดับของแต่ละรายการจะต่างกัน
ข้อมูลต่อไปนี้มีให้ที่นี่
- OpenCV
ndarray.shape
:รับขนาดภาพ (กว้าง สูง)- สำหรับภาพสี
- สำหรับภาพระดับสีเทา (ขาวดำ)
- Pillow(PIL)
size
,width
,height
:รับขนาดภาพ (กว้าง สูง)
ดูบทความต่อไปนี้เกี่ยวกับวิธีรับขนาด (ความจุ) ของไฟล์แทนขนาดภาพ (ขนาด)
- บทความที่เกี่ยวข้อง:รับขนาดของไฟล์หรือไดเร็กทอรี (โฟลเดอร์) ใน Python
OpenCV:ndarray.shape:รับขนาดภาพ (กว้าง สูง)
เมื่อโหลดไฟล์รูปภาพใน OpenCV จะถือว่าเป็นอาร์เรย์ NumPy ndarray และขนาดของรูปภาพ (ความกว้างและความสูง) สามารถรับได้จากรูปร่างแอตทริบิวต์ ซึ่งระบุรูปร่างของ ndarray
ไม่เพียงแต่ใน OpenCV เท่านั้น แต่ยังรวมถึงเมื่อมีการโหลดไฟล์รูปภาพใน Pillow และแปลงเป็น ndarray ขนาดของรูปภาพที่แสดงโดย ndarray จะได้รับโดยใช้รูปร่าง
สำหรับภาพสี
ในกรณีของภาพสี จะใช้ ndarray สามมิติต่อไปนี้
- แถว (สูง)
- แถว (กว้าง)
- สี (3)
รูปร่างเป็นทูเพิลขององค์ประกอบข้างต้น
import cv2 im = cv2.imread('data/src/lena.jpg') print(type(im)) # <class 'numpy.ndarray'> print(im.shape) print(type(im.shape)) # (225, 400, 3) # <class 'tuple'>
ในการกำหนดค่าแต่ละค่าให้กับตัวแปร ให้แกะ tuple ดังต่อไปนี้
h, w, c = im.shape print('width: ', w) print('height: ', h) print('channel:', c) # width: 400 # height: 225 # channel: 3
_
เมื่อทำการแกะ tuple ค่าข้างต้นอาจถูกกำหนดให้เป็นตัวแปรตามอัตภาพสำหรับค่าที่จะไม่ใช้หลังจากนั้น ตัวอย่างเช่น หากไม่ใช้จำนวนสี (จำนวนช่อง) จะใช้ค่าต่อไปนี้
h, w, _ = im.shape print('width: ', w) print('height:', h) # width: 400 # height: 225
นอกจากนี้ยังสามารถใช้ตามที่เป็นอยู่โดยการระบุด้วยดัชนี (ดัชนี) โดยไม่ต้องกำหนดให้กับตัวแปร
print('width: ', im.shape[1]) print('height:', im.shape[0]) # width: 400 # height: 225
(width, height)
หากคุณต้องการได้ทูเพิลนี้ คุณสามารถใช้สไลซ์และเขียนสิ่งต่อไปนี้: cv2.resize() ฯลฯ หากคุณต้องการระบุอาร์กิวเมนต์ตามขนาด ให้ใช้สิ่งนี้
print(im.shape[1::-1]) # (400, 225)
สำหรับภาพระดับสีเทา (ขาวดำ)
ในกรณีของภาพระดับสีเทา (ขาวดำ) จะใช้เอ็นดาร์เรย์แบบสองมิติต่อไปนี้
- แถว (สูง)
- แถว (กว้าง)
รูปร่างจะเป็นทูเพิลนี้
im_gray = cv2.imread('data/src/lena.jpg', cv2.IMREAD_GRAYSCALE) print(im_gray.shape) print(type(im_gray.shape)) # (225, 400) # <class 'tuple'>
โดยพื้นฐานแล้วเหมือนกับภาพสี
h, w = im_gray.shape print('width: ', w) print('height:', h) # width: 400 # height: 225 print('width: ', im_gray.shape[1]) print('height:', im_gray.shape[0]) # width: 400 # height: 225
หากคุณต้องการกำหนดความกว้างและความสูงให้กับตัวแปร คุณสามารถทำได้ดังนี้ ไม่ว่ารูปภาพจะเป็นสีหรือระดับสีเทา
h, w = im.shape[0], im.shape[1] print('width: ', w) print('height:', h) # width: 400 # height: 225
(width, height)
ถ้าคุณต้องการได้ทูเพิลนี้ คุณสามารถใช้สไลซ์แล้วเขียนได้ดังนี้ สามารถใช้รูปแบบการเขียนต่อไปนี้ได้ไม่ว่ารูปภาพจะเป็นสีหรือระดับสีเทา
print(im_gray.shape[::-1]) print(im_gray.shape[1::-1]) # (400, 225) # (400, 225)
Pillow(PIL):size, width, height:รับขนาดภาพ (กว้าง สูง)
วัตถุรูปภาพที่ได้จากการอ่านรูปภาพด้วยหมอน (PIL) มีคุณลักษณะดังต่อไปนี้
size
width
height
ขนาดเป็นทูเพิลต่อไปนี้(width, height)
from PIL import Image im = Image.open('data/src/lena.jpg') print(im.size) print(type(im.size)) # (400, 225) # <class 'tuple'> w, h = im.size print('width: ', w) print('height:', h) # width: 400 # height: 225
คุณยังสามารถรับความกว้างและความสูงตามลำดับเป็นแอตทริบิวต์ได้width
,height
print('width: ', im.width) print('height:', im.height) # width: 400 # height: 225
เช่นเดียวกับภาพระดับสีเทา (ขาวดำ)
im_gray = Image.open('data/src/lena.jpg').convert('L') print(im.size) print('width: ', im.width) print('height:', im.height) # (400, 225) # width: 400 # height: 225