ទទួលបានទំហំរូបភាព (ទទឹង និងកម្ពស់) ជាមួយ Python, OpenCV និង Pillow (PIL)

អាជីវកម្ម

នៅក្នុង Python មានបណ្ណាល័យជាច្រើនសម្រាប់គ្រប់គ្រងរូបភាព ដូចជា OpenCV និង Pillow (PIL)។ ផ្នែកនេះពន្យល់ពីរបៀបដើម្បីទទួលបានទំហំរូបភាព (ទទឹង និងកម្ពស់) សម្រាប់ពួកវានីមួយៗ។

អ្នកអាចទទួលបានទំហំរូបភាព (ទទឹង និងកម្ពស់) ជា tuple ដោយប្រើរូបរាងសម្រាប់ OpenCV និងទំហំសម្រាប់ Pillow (PIL) ប៉ុន្តែចំណាំថាលំដាប់នីមួយៗគឺខុសគ្នា។

ព័ត៌មានខាងក្រោមត្រូវបានផ្តល់ជូននៅទីនេះ។

  • OpenCV
    • ndarray.shape:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)
      • សម្រាប់រូបភាពពណ៌
      • សម្រាប់​រូបភាព​ពណ៌​ប្រផេះ (monochrome)
  • Pillow(PIL)
    • size,width,height:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)

សូមមើលអត្ថបទខាងក្រោមអំពីរបៀបទទួលបានទំហំ (សមត្ថភាព) នៃឯកសារជំនួសឱ្យទំហំរូបភាព (ទំហំ) ។

OpenCV:ndarray.shape:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)

នៅពេលដែលឯកសាររូបភាពត្រូវបានផ្ទុកនៅក្នុង OpenCV វាត្រូវបានចាត់ទុកជា NumPy array ndarray ហើយទំហំរូបភាព (ទទឹង និងកម្ពស់) អាចទទួលបានពី attribute shape ដែលបង្ហាញពីរូបរាងរបស់ 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

វា​ក៏​អាច​ត្រូវ​បាន​ប្រើ​ដូច​ជា​ដែរ​ដោយ​បញ្ជាក់​វា​ដោយ​លិបិក្រម (index) ដោយ​មិន​កំណត់​វា​ទៅ​អថេរ។

print('width: ', im.shape[1])
print('height:', im.shape[0])
# width:  400
# height: 225

(width, height)
ប្រសិន​បើ​អ្នក​ចង់​ទទួល​បាន tuple នេះ អ្នក​អាច​ប្រើ slice ហើយ​សរសេរ​ដូច​ខាង​ក្រោម៖ cv2.resize() ។ល។ ប្រសិនបើអ្នកចង់​បញ្ជាក់​អាគុយម៉ង់​តាម​ទំហំ សូម​ប្រើ​វា​។

print(im.shape[1::-1])
# (400, 225)

សម្រាប់​រូបភាព​ពណ៌​ប្រផេះ (monochrome)

ក្នុង​ករណី​នៃ​មាត្រដ្ឋាន​ប្រផេះ (ម៉ូណូក្រូម) រូបភាព ndarray ពីរ​វិមាត្រ​ខាងក្រោម​ត្រូវ​បាន​ប្រើ។

  • ជួរ (កម្ពស់)
  • ជួរ (ទទឹង)

រូបរាងនឹងជា tuple នេះ។

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)
ប្រសិនបើអ្នកចង់ទទួលបាន tuple នេះអ្នកអាចប្រើចំណិតហើយសរសេរវាដូចខាងក្រោម។ រចនាប័ទ្ម​សរសេរ​ខាងក្រោម​អាច​ត្រូវ​បាន​ប្រើ​មិន​ថា​រូបភាព​មាន​ពណ៌ ឬ​មាត្រដ្ឋាន​ប្រផេះ​ទេ។

print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)

Pillow(PIL):size, width, height:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)

វត្ថុរូបភាពដែលទទួលបានដោយការអានរូបភាពជាមួយ Pillow (PIL) មានគុណលក្ខណៈដូចខាងក្រោម។

  • size
  • width
  • height

ទំហំគឺ tuple ខាងក្រោម។
(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

ដូចគ្នាដែរចំពោះរូបភាពដែលមានមាត្រដ្ឋានប្រផេះ (monochrome)។

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

នៅក្នុង Python មានបណ្ណាល័យជាច្រើនសម្រាប់គ្រប់គ្រងរូបភាព ដូចជា OpenCV និង Pillow (PIL)។ ផ្នែកនេះពន្យល់ពីរបៀបដើម្បីទទួលបានទំហំរូបភាព (ទទឹង និងកម្ពស់) សម្រាប់ពួកវានីមួយៗ។

អ្នកអាចទទួលបានទំហំរូបភាព (ទទឹង និងកម្ពស់) ជា tuple ដោយប្រើរូបរាងសម្រាប់ OpenCV និងទំហំសម្រាប់ Pillow (PIL) ប៉ុន្តែចំណាំថាលំដាប់នីមួយៗគឺខុសគ្នា។

ព័ត៌មានខាងក្រោមត្រូវបានផ្តល់ជូននៅទីនេះ។

  • OpenCV
    • ndarray.shape:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)
      • សម្រាប់រូបភាពពណ៌
      • សម្រាប់​រូបភាព​ពណ៌​ប្រផេះ (monochrome)
  • Pillow(PIL)
    • size,width,height:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)

សូមមើលអត្ថបទខាងក្រោមអំពីរបៀបទទួលបានទំហំ (សមត្ថភាព) នៃឯកសារជំនួសឱ្យទំហំរូបភាព (ទំហំ) ។

OpenCV:ndarray.shape:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)

នៅពេលដែលឯកសាររូបភាពត្រូវបានផ្ទុកនៅក្នុង OpenCV វាត្រូវបានចាត់ទុកជា NumPy array ndarray ហើយទំហំរូបភាព (ទទឹង និងកម្ពស់) អាចទទួលបានពី attribute shape ដែលបង្ហាញពីរូបរាងរបស់ 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

វា​ក៏​អាច​ត្រូវ​បាន​ប្រើ​ដូច​ជា​ដែរ​ដោយ​បញ្ជាក់​វា​ដោយ​លិបិក្រម (index) ដោយ​មិន​កំណត់​វា​ទៅ​អថេរ។

print('width: ', im.shape[1])
print('height:', im.shape[0])
# width:  400
# height: 225

(width, height)
ប្រសិន​បើ​អ្នក​ចង់​ទទួល​បាន tuple នេះ អ្នក​អាច​ប្រើ slice ហើយ​សរសេរ​ដូច​ខាង​ក្រោម៖ cv2.resize() ។ល។ ប្រសិនបើអ្នកចង់​បញ្ជាក់​អាគុយម៉ង់​តាម​ទំហំ សូម​ប្រើ​វា​។

print(im.shape[1::-1])
# (400, 225)

សម្រាប់​រូបភាព​ពណ៌​ប្រផេះ (monochrome)

ក្នុង​ករណី​នៃ​មាត្រដ្ឋាន​ប្រផេះ (ម៉ូណូក្រូម) រូបភាព ndarray ពីរ​វិមាត្រ​ខាងក្រោម​ត្រូវ​បាន​ប្រើ។

  • ជួរ (កម្ពស់)
  • ជួរ (ទទឹង)

រូបរាងនឹងជា tuple នេះ។

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)
ប្រសិនបើអ្នកចង់ទទួលបាន tuple នេះអ្នកអាចប្រើចំណិតហើយសរសេរវាដូចខាងក្រោម។ រចនាប័ទ្ម​សរសេរ​ខាងក្រោម​អាច​ត្រូវ​បាន​ប្រើ​មិន​ថា​រូបភាព​មាន​ពណ៌ ឬ​មាត្រដ្ឋាន​ប្រផេះ​ទេ។

print(im_gray.shape[::-1])
print(im_gray.shape[1::-1])
# (400, 225)
# (400, 225)

Pillow(PIL):size, width, height:ទទួលបានទំហំរូបភាព (ទទឹង កម្ពស់)

វត្ថុរូបភាពដែលទទួលបានដោយការអានរូបភាពជាមួយ Pillow (PIL) មានគុណលក្ខណៈដូចខាងក្រោម។

  • size
  • width
  • height

ទំហំគឺ tuple ខាងក្រោម។
(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

ដូចគ្នាដែរចំពោះរូបភាពដែលមានមាត្រដ្ឋានប្រផេះ (monochrome)។

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
Copied title and URL