รับขนาดภาพ (ความกว้างและความสูง) ด้วย Python, OpenCV และ Pillow(PIL)

ธุรกิจ

ใน Python มีหลายไลบรารีสำหรับจัดการรูปภาพ เช่น OpenCV และ Pillow (PIL) ส่วนนี้อธิบายวิธีรับขนาดรูปภาพ (ความกว้างและความสูง) สำหรับแต่ละขนาด

คุณสามารถรับขนาดรูปภาพ (ความกว้างและความสูง) เป็นทูเพิลโดยใช้รูปร่างสำหรับ OpenCV และขนาดสำหรับหมอน (PIL) แต่โปรดทราบว่าลำดับของแต่ละรายการจะต่างกัน

ข้อมูลต่อไปนี้มีให้ที่นี่

  • OpenCV
    • ndarray.shape:รับขนาดภาพ (กว้าง สูง)
      • สำหรับภาพสี
      • สำหรับภาพระดับสีเทา (ขาวดำ)
  • Pillow(PIL)
    • size,width,height:รับขนาดภาพ (กว้าง สูง)

ดูบทความต่อไปนี้เกี่ยวกับวิธีรับขนาด (ความจุ) ของไฟล์แทนขนาดภาพ (ขนาด)

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