顯示具有 影像處理 標籤的文章。 顯示所有文章
顯示具有 影像處理 標籤的文章。 顯示所有文章

2024年2月20日 星期二

Python 學習筆記 : OpenCV (三) 視訊讀寫與顯示

今天繼續測試 OpenCV 功能, 本系列之前的文章參考 :


OpenCV 官方教學文件 (Python) 參考 :



一. 從檔案讀取視訊 : 

本篇要來測試 OpenCV 的視訊讀寫功能, 這要用到其 VideoCapture 類別, 它可以從檔案 (例如 mp4 檔) 或攝影機讀取視訊, 呼叫其建構式 VideoCapture() 會傳回一個 VideoCapture 物件, 其參數介面如下 : 

vcap=VideoCapture(file [, flag])             # 從檔案 file (含路徑) 讀取視訊


此處用來測試的影片是從 YT 下載, 網友改編自周星馳電影 "唐伯虎點秋香", 用來提醒明天要補班的片段 :





可以用線上 YT 轉 MP4 工具下載 : 


將下載的 mp4 檔案放在工作目錄下, 然後將檔名傳給 cv2.VideoCapture() 即可, 它會傳回一個包含兩元素的 tuple

>>> import cv2   
>>> vcap=cv2.VideoCapture('唐伯虎點秋香-記得明天要上班.mp4')   
>>> type(vcap)   
<class 'cv2.VideoCapture'>   

用 dir() 檢視 VideoCapture 物件的內容 :

>>> dir(vcap)  
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'get', 'getBackendName', 'getExceptionMode', 'grab', 'isOpened', 'open', 'read', 'release', 'retrieve', 'set', 'setExceptionMode', 'waitAny']

VideoCapture 物件提供一些方法可用來讀取視訊框, 常用者如下表 : 


 VideoCapture 物件方法 說明
 isOpened() 檢查影片檔是否正常開啟, 傳回 True/False
 read() 向下讀取一幀 (frame) 訊框, 傳回 (ret, frame), ret=True 表示讀取成功
 release() 釋放儲存視訊框的記憶體


顯示所讀取之視訊要用一個 while 無窮迴圈呼叫 VideoCapture 物件的 read() 方法依序讀取物件中的視訊框, 然後用 cv2.imshow() 顯示此訊框 (圖片), 並利用傳入 cv2.waitKey() 之延遲毫秒參數控制影片播放速度, 直到讀不到訊框 (ret=False) 跳出無窮迴圈為止. 

例如 :
# opencv_read_mp4_1.py
import cv2

vcap=cv2.VideoCapture('唐伯虎點秋香-記得明天要上班.mp4')  # 讀取 mp4 檔案
if not vcap.isOpened():   # 檢查檔案是否開啟成功
    print('無法開啟影片檔')
    exit()    # 跳出程式
while True:   
    ret, frame=vcap.read()   # 讀取下一個訊框
    if not ret:    # 檢查訊框是否已讀完
        print('未收到訊框')
        break      # 跳出迴圈
    cv2.imshow('videocapture', frame)    # 顯示此訊框
    if cv2.waitKey(50) == ord('q'):    # 延遲 50ms 期間若按下 'q' 跳出迴圈
        break
vcap.release()
cv2.destroyAllWindows()

截圖如下如下 :





此例中 cv2.waitKey() 參數值調小會讓動作變快, 調大則會變慢. 適當的值可參考影片檔的總幀數 與影片時間長度來決定, 只要將時長除以總幀數即可得到每幀要停留多久時間. 如果影片檔較小, 可以用下列網站來取得總幀數與時長 :


將影片檔上傳, 播完後即可得到總 frame 數與時長 :




可見此影片總框數為 776 框, 影片總長為 12.933 秒, 故每幀時間為 12.933/776=16.7 ms, 但 cv2.waitKey() 只能傳入整數, 故取 17 ms, 但播放起來還是覺得有點快動作, 改成 50 就比較自然了. 


二. 從攝影機讀取視訊 :  

如果是筆電或有外接攝影機的電腦, 只要將攝影機編號 (第一台編號 0, 第二台編號 1, ...) 傳給 VideoCapture() 建構式即可即時從攝影機擷取視訊, 將其分解為一幀幀的圖片 :

vcap=VideoCapture(camera [, flag])     # 從攝影機 camera (0, 1, 2 ...) 讀取視訊

用法與上面讀取影片檔類似, 只是將第一參數從檔案名稱字串改成攝影機編號而已, 例如 : 

import cv2

vcap=cv2.VideoCapture(0)   # 讀取編號 0 攝影機
if not vcap.isOpened():
    print('無法開啟攝影機')
    exit()
while True:
    ret, frame=vcap.read()
    if not ret:
        print('未收到訊框')
        break
    cv2.imshow('videocapture', frame)
    if cv2.waitKey(1) == ord('q'):      # 延遲時間用 1 影像較即時
        break
vcap.release()
cv2.destroyAllWindows()

注意, 此例 cv2.waitKey() 參數改為 1ms 才能喪影像反應更即時. 截圖如下 :




2024年2月19日 星期一

市圖還書 1 本 : 一本精通 OpenCV與AI影像辨識

本周市圖還書 1 本 (被預約) :


此書前幾天發現快到期時才開始看, 才發現內容寫得極好, 認真看了第二章就得還了. 下次再預約.  

2024年2月18日 星期日

Python 學習筆記 : OpenCV (二) 圖檔讀寫與顯示

本篇繼續按圖索驥繼續測試 OpenCV 功能, 本系列之前的文章參考 :


OpenCV 官方教學文件 (Python) 參考 :


OpenCV 提供了豐富的函式來處理影像, 下表為圖像讀寫與顯示會用到的函式 : 


 cv2 圖像處理函式 說明
 imread(file [, mode]) 以指定模式 mode 開啟檔案 file, 傳回一個代表圖片之 ndarray
 imwrite(file, img [quality]) 將圖片物件 img 以品質 quality 寫入 file 檔案 (jpg/jpeg, png 等)
 imshow(name, img) 將圖片物件 img 顯示於名為 name (字串) 的視窗內
 waitKey(t) 圖片視窗於 t 毫秒後關閉 (按 q 提前關閉), t=0 表示等按鍵才關閉
 destroyAllWindows() 關閉全部 cv2 所開啟的視窗
 split(img) 將圖片物件 img 分解為 B, G, R 三色, 傳回 (B, G, R) tuple


一. 讀取並顯示圖片 : 

此處要操作的圖檔是影像處理界赫赫有名的 Lenna 圖, 參考 : 


此圖可從 Wiki 下載使用 :


下載後放在目前的工作目錄下便可用 OpenCV 讀取顯示 :

>>> import cv2 
>>> lenna=cv2.imread('Lenna.jpg')    # 讀取圖檔傳回 ndarray 物件, 預設為彩色模式
>>> type(lenna)   
<class 'numpy.ndarray'>   
>>> lenna.shape            # 圖片物件的形狀為 316*316 彩色
(316, 316, 3)
>>> lenna.size               # 像素總數 316*316*3=299568 點
299568
>>> lenna.dtype            # 8 位元整數型態 (值 0~255)
dtype('uint8')
>>> lenna 
array([[[125, 137, 225],
        [130, 137, 224],
        [125, 137, 225],
        ...,

可見圖片物件為 3 軸陣列. 注意, OpenCV 的顏色排列順序不是 RGB, 而是 GBR. 

>>> cv2.imshow('lenna', lenna)     # 開啟名為 'lenna' 視窗來顯示圖片物件 lenna
>>> cv2.waitKey(0)     # 維持視窗顯示直到按下任意鍵

在 Python 互動環境執行上述指令時, 呼叫 imshow() 僅建立顯示視窗並未顯示圖片, 而是呼叫 waitKey() 時才顯示, 結果如下 :




將滑鼠移到圖形視窗上按任意鍵會傳回一個 code, 然後呼叫 destroyAllWindows() 可關閉視窗 :

13
>>> cv2.destroyAllWindows()   

寫成 .py 程式如下 :

# opencv_read_picture_1.py
import cv2 
lenna=cv2.imread('Lenna.jpg')
cv2.imshow('lenna', lenna)  
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面測試中呼叫 imread() 時只傳入一個參數 (圖檔名稱), 並未指定開檔模式常數 mode, 預設是 1 (1=cv2.IMREAD_COLOR, 彩色模式), 事實上 OpenCV 定義了如下 13 種模式 :


 imread() 的 mode 參數 說明
 IMREAD_UNCHANGED (-1) 原始模式 (包含 alpha 值)
 IMREAD_GRAYSCALE (0) 灰階模式
 IMREAD_COLOR (1) BGR 彩色模式 (預設值)
 IMREAD_ANYDEPTH (2) 有深度時傳回 16/32 位元物件, 否則傳回 8 位元物件
 IMREAD_ANYCOLOR (4) 以任何顏色格式讀取圖片
 IMREAD_LOAD_GDAL (8) 以 GDAL 驅動程式載入圖片
 IMREAD_REDUCED_GRAYSCALE_2 (16) 尺寸減少 1/2 的灰階模式
 IMREAD_REDUCED_COLOR_2 (17) 尺寸減少 1/2 的 BGR 彩色模式
 IMREAD_REDUCED_GRAYSCALE_4 (32) 尺寸減少 1/4 的灰階模式
 IMREAD_REDUCED_COLOR_4 (33) 尺寸減少 1/4 的 BGR 彩色模式
 IMREAD_REDUCED_GRAYSCALE_8 (64) 尺寸減少 1/8 的灰階模式
 IMREAD_REDUCED_COLOR_8 (65) 尺寸減少 1/8 的 BGR 彩色模式
 IMREAD_IGNORE_ORIENTATION (128) 忽略 EXIF 中的方向資訊 (不旋轉)


這些模式常數是一個整數值, 可以用下列程式來顯示其值 :

>>> modes=[cv2.IMREAD_UNCHANGED,
       cv2.IMREAD_GRAYSCALE,
       cv2.IMREAD_COLOR,
       cv2.IMREAD_ANYDEPTH,
       cv2.IMREAD_ANYCOLOR,
       cv2.IMREAD_LOAD_GDAL,
       cv2.IMREAD_REDUCED_GRAYSCALE_2,
       cv2.IMREAD_REDUCED_COLOR_2,
       cv2.IMREAD_REDUCED_GRAYSCALE_4,
       cv2.IMREAD_REDUCED_COLOR_4,
       cv2.IMREAD_REDUCED_GRAYSCALE_8,
       cv2.IMREAD_REDUCED_COLOR_8,
       cv2.IMREAD_IGNORE_ORIENTATION]
>>> for mode in modes:    
    print(mode, end=',')  
    
-1,0,1,2,4,8,16,17,32,33,64,65,128,    

例如以灰階模式 (mode=0) 讀取圖片 :

# opencv_read_picture_2.py
import cv2 
lenna=cv2.imread('Lenna.jpg', 0)  # 灰階模式
cv2.imshow('lenna', lenna)  
cv2.waitKey(0)
cv2.destroyAllWindows()

結果如下 :




下面範例使用 mode=16 (cv2.IMREAD_REDUCED_GRAYSCALE_2) 來產生 1/2 灰階圖片物件 : 

# opencv_read_picture_3.py
import cv2 
lenna=cv2.imread('Lenna.jpg', 16)  # 1/2 灰階模式
print(lenna.shape)
cv2.imshow('lenna', lenna)  
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出如下 :

>>> %Run opencv_read_picture_3.py   
(158, 158)  

可見尺寸之長寬確實變成 1/2 (因為是灰階, 故無顏色軸). 

下面範例使用 mode=17 (cv2.IMREAD_REDUCED_COLOR_2) 來產生 1/2 彩色圖片 : 

# opencv_read_picture_4.py
import cv2 
lenna=cv2.imread('Lenna.jpg', cv2.IMREAD_REDUCED_COLOR_2)  # 1/2 彩色 
print(lenna.shape)
cv2.imshow('lenna', lenna)  
cv2.waitKey(0)
cv2.destroyAllWindows()

結果如下 :

>>> %Run opencv_read_picture_4py.py    
(158, 158, 3)

可見尺寸已縮為 1/2 (長寬 316/2=158). 


二. 寫入圖片 : 

呼叫 cv2.imwrite() 可將圖片物件儲存為檔案, 此函式可傳入三個參數 :
  • file : 輸出圖檔名稱 (含路徑), 必要參數
  • img : 圖片物件 (ndarray), 必要參數
  • quality : 圖片品質 (串列), 備選參數
下列範例先讀入 Lenna.jpg, 然後存成 Lenna,png :

# opencv_read_picture_5.py
import cv2 
lenna=cv2.imread('Lenna.jpg')       # 讀取 Lenna.jpg 為 ndarray 陣列 
cv2.imwrite('Lenna.png', lenna)    # 存成 PNG 檔 Lenna.png
cv2.waitKey(0)
cv2.destroyAllWindows()

執行完畢會在工作目錄下產生一個 Lenna.png : 




也可以自己製作 ndarray 陣列來產生圖片物件並寫入圖檔, 下面範例改寫自 "一本精通 : OpenCV與AI影像辨識" :

# opencv_read_picture_6.py
import cv2
import numpy as np

img=np.zeros((400, 400, 3), dtype='uint8')
img += 170
img[100:300, 100:300]=[200, 150, 0]
cv2.imwrite('cv2_test_1.jpg', img)
cv2.imshow('cv2_test_1', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

此例先用 Numpy 的 zeros() 建立一個 400*300*3 的 ndarray 陣列物件, 所有元素都是 0, 然後用 += 運算符將每個元素都加一個整數 (170), 所以圖片目前的背景色是 (B, G, R)=(170, 170, 170), 再用切片運算將索引位置 100:300 的值全部改成  (B, G, R)=(200, 150, 0), 最後將其寫入檔案並顯示, 結果如下 : 




注意, 如上所述, OpenCV 的像素的色彩順序是 B, G, R 而不是 R, G, B. 

2024年2月16日 星期五

Python 學習筆記 : OpenCV (一) 套件安裝

OpenCV (Open source Computer Vision) 是一個開放原始碼的跨平台電腦視覺函式庫, 最早是 Intel 於 1999 年開始研發, 後來以 BSD 授權開源 (可免費做商業應用), 主要用來做即時影像處理與辨識, 支援 Nvidia 的 CUDA 函式庫, 廣泛應用在人臉偵測與物體辨識等領域, 其核心以 C/C++ 開發, 但提供 Python, Java, 以及 MALAB 等主流程式語言之介面, 參考 :


No.1 這本是 OpenCV 專書, 很完整地說明 OpenCV 的用法 (大推), No.2 則較專注於 Linux 環境, 特別是有介紹如何在樹莓派中從 OpenCV 原始碼編譯為 Python 可執行檔的方法 (可使用到 OpenCV 的專利演算法).


一. 本機 Python 執行環境 : 

在本機執行 OpenCV 須安裝 opencv-python 套件, 可用 pip install 直接安裝 (約 38.6 MB) :

pip install opencv-python 

D:\python\test>pip install opencv-python   
Collecting opencv-python
  Downloading opencv_python-4.9.0.80-cp37-abi3-win_amd64.whl.metadata (20 kB)
Requirement already satisfied: numpy>=1.21.2 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from opencv-python) (1.24.3)
Downloading opencv_python-4.9.0.80-cp37-abi3-win_amd64.whl (38.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 38.6/38.6 MB 4.3 MB/s eta 0:00:00
Installing collected packages: opencv-python
Successfully installed opencv-python-4.9.0.80

如果要測試物體追蹤與人臉辨識等進階功能還要安裝 opencv_contrib_python 套件 (約 45.3 MB), 同樣可用 pip install 直接安裝 : 

pip install opencv_contrib_python 

D:\python\test>pip install opencv_contrib_python   
Collecting opencv_contrib_python
  Downloading opencv_contrib_python-4.9.0.80-cp37-abi3-win_amd64.whl.metadata (20 kB)
Requirement already satisfied: numpy>=1.21.2 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from opencv_contrib_python) (1.24.3)
Downloading opencv_contrib_python-4.9.0.80-cp37-abi3-win_amd64.whl (45.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.3/45.3 MB 7.8 MB/s eta 0:00:00
Installing collected packages: opencv_contrib_python
Successfully installed opencv_contrib_python-4.9.0.80

注意, 使用 OpenCV 要匯入的模組名稱是 cv2, 例如 :

>>> import cv2 
>>> cv2.__version__  
'4.9.0'


二. Colab 雲端執行環境 : 

谷歌雲端的 Colab 已經預先安裝 OpenCV 可直接使用 (目前版本 v4.8) : 





三. 檢視 OpenCV 函式庫內容 : 

雖然利用 dir() 就可辦到, 但其輸出不好閱讀, 所以改用自訂的 members.py 模組來做這件事, 它可以過濾出模組或套件裡面有哪些類別或函式 : 

# members.py
import inspect 
def varname(x): 
    return [k for k,v in inspect.currentframe().f_back.f_locals.items() if v is x][0]
def list_members(parent_obj):
    members=dir(parent_obj)
    parent_obj_name=varname(parent_obj)       
    for mbr in members:
        child_obj=eval(parent_obj_name + '.' + mbr) 
        if not mbr.startswith('_'):
            print(mbr, type(child_obj))

只要將上面函式存成 members.py, 然後匯入其 list_members() 函式即可 :

>>> from members import list_members  
>>> list_members(cv2)  
... (略) ...
absdiff <class 'builtin_function_or_method'>
accumulate <class 'builtin_function_or_method'>
accumulateProduct <class 'builtin_function_or_method'>
accumulateSquare <class 'builtin_function_or_method'>
accumulateWeighted <class 'builtin_function_or_method'>
adaptiveThreshold <class 'builtin_function_or_method'>
add <class 'builtin_function_or_method'>
addText <class 'builtin_function_or_method'>
addWeighted <class 'builtin_function_or_method'>
applyColorMap <class 'builtin_function_or_method'>
approxPolyDP <class 'builtin_function_or_method'>
arcLength <class 'builtin_function_or_method'>
arrowedLine <class 'builtin_function_or_method'>
aruco <class 'module'>
aruco_ArucoDetector <class 'type'>
aruco_Board <class 'type'>
aruco_CharucoBoard <class 'type'>
aruco_CharucoDetector <class 'type'>
aruco_CharucoParameters <class 'type'>
aruco_DetectorParameters <class 'type'>
aruco_Dictionary <class 'type'>
aruco_EstimateParameters <class 'type'>
aruco_GridBoard <class 'type'>
aruco_RefineParameters <class 'type'>
barcode <class 'module'>
barcode_BarcodeDetector <class 'type'>
batchDistance <class 'builtin_function_or_method'>
bgsegm <class 'module'>
bgsegm_BackgroundSubtractorCNT <class 'type'>
bgsegm_BackgroundSubtractorGMG <class 'type'>
bgsegm_BackgroundSubtractorGSOC <class 'type'>
bgsegm_BackgroundSubtractorLSBP <class 'type'>
bgsegm_BackgroundSubtractorLSBPDesc <class 'type'>
bgsegm_BackgroundSubtractorMOG <class 'type'>
bgsegm_SyntheticSequenceGenerator <class 'type'>
bilateralFilter <class 'builtin_function_or_method'>
bioinspired <class 'module'>
bioinspired_Retina <class 'type'>
bioinspired_RetinaFastToneMapping <class 'type'>
bioinspired_TransientAreasSegmentationModule <class 'type'>
bitwise_and <class 'builtin_function_or_method'>
bitwise_not <class 'builtin_function_or_method'>
bitwise_or <class 'builtin_function_or_method'>
bitwise_xor <class 'builtin_function_or_method'>
blendLinear <class 'builtin_function_or_method'>
blur <class 'builtin_function_or_method'>
bootstrap <class 'function'>
borderInterpolate <class 'builtin_function_or_method'>
boundingRect <class 'builtin_function_or_method'>
boxFilter <class 'builtin_function_or_method'>
boxPoints <class 'builtin_function_or_method'>
broadcast <class 'builtin_function_or_method'>
buildOpticalFlowPyramid <class 'builtin_function_or_method'>
calcBackProject <class 'builtin_function_or_method'>
calcCovarMatrix <class 'builtin_function_or_method'>
calcHist <class 'builtin_function_or_method'>
calcOpticalFlowFarneback <class 'builtin_function_or_method'>
calcOpticalFlowPyrLK <class 'builtin_function_or_method'>
calibrateCamera <class 'builtin_function_or_method'>
calibrateCameraExtended <class 'builtin_function_or_method'>
calibrateCameraRO <class 'builtin_function_or_method'>
calibrateCameraROExtended <class 'builtin_function_or_method'>
calibrateHandEye <class 'builtin_function_or_method'>
calibrateRobotWorldHandEye <class 'builtin_function_or_method'>
calibrationMatrixValues <class 'builtin_function_or_method'>
cartToPolar <class 'builtin_function_or_method'>
ccm <class 'module'>
ccm_ColorCorrectionModel <class 'type'>
checkChessboard <class 'builtin_function_or_method'>
checkHardwareSupport <class 'builtin_function_or_method'>
checkRange <class 'builtin_function_or_method'>
circle <class 'builtin_function_or_method'>
clipLine <class 'builtin_function_or_method'>
colorChange <class 'builtin_function_or_method'>
colored_kinfu <class 'module'>
colored_kinfu_ColoredKinFu <class 'type'>
colored_kinfu_Params <class 'type'>
compare <class 'builtin_function_or_method'>
compareHist <class 'builtin_function_or_method'>
completeSymm <class 'builtin_function_or_method'>
composeRT <class 'builtin_function_or_method'>
computeCorrespondEpilines <class 'builtin_function_or_method'>
computeECC <class 'builtin_function_or_method'>
connectedComponents <class 'builtin_function_or_method'>
connectedComponentsWithAlgorithm <class 'builtin_function_or_method'>
connectedComponentsWithStats <class 'builtin_function_or_method'>
connectedComponentsWithStatsWithAlgorithm <class 'builtin_function_or_method'>
contourArea <class 'builtin_function_or_method'>
convertFp16 <class 'builtin_function_or_method'>
convertMaps <class 'builtin_function_or_method'>
convertPointsFromHomogeneous <class 'builtin_function_or_method'>
convertPointsToHomogeneous <class 'builtin_function_or_method'>
convertScaleAbs <class 'builtin_function_or_method'>
convexHull <class 'builtin_function_or_method'>
convexityDefects <class 'builtin_function_or_method'>
copyMakeBorder <class 'builtin_function_or_method'>
copyTo <class 'builtin_function_or_method'>
cornerEigenValsAndVecs <class 'builtin_function_or_method'>
cornerHarris <class 'builtin_function_or_method'>
cornerMinEigenVal <class 'builtin_function_or_method'>
cornerSubPix <class 'builtin_function_or_method'>
correctMatches <class 'builtin_function_or_method'>
countNonZero <class 'builtin_function_or_method'>
createAffineTransformer <class 'builtin_function_or_method'>
createAlignMTB <class 'builtin_function_or_method'>
createBackgroundSubtractorKNN <class 'builtin_function_or_method'>
createBackgroundSubtractorMOG2 <class 'builtin_function_or_method'>
createButton <class 'builtin_function_or_method'>
createCLAHE <class 'builtin_function_or_method'>
createCalibrateDebevec <class 'builtin_function_or_method'>
createCalibrateRobertson <class 'builtin_function_or_method'>
createChiHistogramCostExtractor <class 'builtin_function_or_method'>
createEMDHistogramCostExtractor <class 'builtin_function_or_method'>
createEMDL1HistogramCostExtractor <class 'builtin_function_or_method'>
createGeneralizedHoughBallard <class 'builtin_function_or_method'>
createGeneralizedHoughGuil <class 'builtin_function_or_method'>
createHanningWindow <class 'builtin_function_or_method'>
createHausdorffDistanceExtractor <class 'builtin_function_or_method'>
createLineSegmentDetector <class 'builtin_function_or_method'>
createMergeDebevec <class 'builtin_function_or_method'>
createMergeMertens <class 'builtin_function_or_method'>
createMergeRobertson <class 'builtin_function_or_method'>
createNormHistogramCostExtractor <class 'builtin_function_or_method'>
createShapeContextDistanceExtractor <class 'builtin_function_or_method'>
createThinPlateSplineShapeTransformer <class 'builtin_function_or_method'>
createTonemap <class 'builtin_function_or_method'>
createTonemapDrago <class 'builtin_function_or_method'>
createTonemapMantiuk <class 'builtin_function_or_method'>
createTonemapReinhard <class 'builtin_function_or_method'>
createTrackbar <class 'builtin_function_or_method'>
cubeRoot <class 'builtin_function_or_method'>
cuda <class 'module'>
cuda_BufferPool <class 'type'>
cuda_DeviceInfo <class 'type'>
cuda_Event <class 'type'>
cuda_GpuData <class 'type'>
cuda_GpuMat <class 'type'>
cuda_GpuMatND <class 'type'>
cuda_GpuMat_Allocator <class 'type'>
cuda_HostMem <class 'type'>
cuda_SURF_CUDA <class 'type'>
cuda_Stream <class 'type'>
cuda_TargetArchs <class 'type'>
cvtColor <class 'builtin_function_or_method'>
cvtColorTwoPlane <class 'builtin_function_or_method'>
data <class 'module'>
datasets <class 'module'>
dct <class 'builtin_function_or_method'>
decolor <class 'builtin_function_or_method'>
decomposeEssentialMat <class 'builtin_function_or_method'>
decomposeHomographyMat <class 'builtin_function_or_method'>
decomposeProjectionMatrix <class 'builtin_function_or_method'>
demosaicing <class 'builtin_function_or_method'>
denoise_TVL1 <class 'builtin_function_or_method'>
destroyAllWindows <class 'builtin_function_or_method'>
destroyWindow <class 'builtin_function_or_method'>
detail <class 'module'>
detailEnhance <class 'builtin_function_or_method'>
detail_AffineBasedEstimator <class 'type'>
detail_AffineBestOf2NearestMatcher <class 'type'>
detail_BestOf2NearestMatcher <class 'type'>
detail_BestOf2NearestRangeMatcher <class 'type'>
detail_Blender <class 'type'>
detail_BlocksChannelsCompensator <class 'type'>
detail_BlocksCompensator <class 'type'>
detail_BlocksGainCompensator <class 'type'>
detail_BundleAdjusterAffine <class 'type'>
detail_BundleAdjusterAffinePartial <class 'type'>
detail_BundleAdjusterBase <class 'type'>
detail_BundleAdjusterRay <class 'type'>
detail_BundleAdjusterReproj <class 'type'>
detail_CameraParams <class 'type'>
detail_ChannelsCompensator <class 'type'>
detail_DpSeamFinder <class 'type'>
detail_Estimator <class 'type'>
detail_ExposureCompensator <class 'type'>
detail_FeatherBlender <class 'type'>
detail_FeaturesMatcher <class 'type'>
detail_GainCompensator <class 'type'>
detail_GraphCutSeamFinder <class 'type'>
detail_HomographyBasedEstimator <class 'type'>
detail_ImageFeatures <class 'type'>
detail_MatchesInfo <class 'type'>
detail_MultiBandBlender <class 'type'>
detail_NoBundleAdjuster <class 'type'>
detail_NoExposureCompensator <class 'type'>
detail_NoSeamFinder <class 'type'>
detail_PairwiseSeamFinder <class 'type'>
detail_ProjectorBase <class 'type'>
detail_SeamFinder <class 'type'>
detail_SphericalProjector <class 'type'>
detail_Timelapser <class 'type'>
detail_TimelapserCrop <class 'type'>
detail_VoronoiSeamFinder <class 'type'>
determinant <class 'builtin_function_or_method'>
dft <class 'builtin_function_or_method'>
dilate <class 'builtin_function_or_method'>
displayOverlay <class 'builtin_function_or_method'>
displayStatusBar <class 'builtin_function_or_method'>
distanceTransform <class 'builtin_function_or_method'>
distanceTransformWithLabels <class 'builtin_function_or_method'>
divSpectrums <class 'builtin_function_or_method'>
divide <class 'builtin_function_or_method'>
dnn <class 'module'>
dnn_ClassificationModel <class 'type'>
dnn_DetectionModel <class 'type'>
dnn_DictValue <class 'type'>
dnn_Image2BlobParams <class 'type'>
dnn_KeypointsModel <class 'type'>
dnn_Layer <class 'type'>
dnn_Model <class 'type'>
dnn_Net <class 'type'>
dnn_SegmentationModel <class 'type'>
dnn_TextDetectionModel <class 'type'>
dnn_TextDetectionModel_DB <class 'type'>
dnn_TextDetectionModel_EAST <class 'type'>
dnn_TextRecognitionModel <class 'type'>
dnn_registerLayer <class 'builtin_function_or_method'>
dnn_superres <class 'module'>
dnn_superres_DnnSuperResImpl <class 'type'>
dnn_unregisterLayer <class 'builtin_function_or_method'>
dpm <class 'module'>
dpm_DPMDetector <class 'type'>
dpm_DPMDetector_ObjectDetection <class 'type'>
drawChessboardCorners <class 'builtin_function_or_method'>
drawContours <class 'builtin_function_or_method'>
drawFrameAxes <class 'builtin_function_or_method'>
drawKeypoints <class 'builtin_function_or_method'>
drawMarker <class 'builtin_function_or_method'>
drawMatches <class 'builtin_function_or_method'>
drawMatchesKnn <class 'builtin_function_or_method'>
dynafu <class 'module'>
dynafu_DynaFu <class 'type'>
edgePreservingFilter <class 'builtin_function_or_method'>
eigen <class 'builtin_function_or_method'>
eigenNonSymmetric <class 'builtin_function_or_method'>
ellipse <class 'builtin_function_or_method'>
ellipse2Poly <class 'builtin_function_or_method'>
empty_array_desc <class 'builtin_function_or_method'>
empty_gopaque_desc <class 'builtin_function_or_method'>
empty_scalar_desc <class 'builtin_function_or_method'>
equalizeHist <class 'builtin_function_or_method'>
erode <class 'builtin_function_or_method'>
error <class 'type'>
estimateAffine2D <class 'builtin_function_or_method'>
estimateAffine3D <class 'builtin_function_or_method'>
estimateAffinePartial2D <class 'builtin_function_or_method'>
estimateChessboardSharpness <class 'builtin_function_or_method'>
estimateTranslation3D <class 'builtin_function_or_method'>
exp <class 'builtin_function_or_method'>
extractChannel <class 'builtin_function_or_method'>
face <class 'module'>
face_BIF <class 'type'>
face_BasicFaceRecognizer <class 'type'>
face_EigenFaceRecognizer <class 'type'>
face_FaceRecognizer <class 'type'>
face_Facemark <class 'type'>
face_FacemarkAAM <class 'type'>
face_FacemarkKazemi <class 'type'>
face_FacemarkLBF <class 'type'>
face_FacemarkTrain <class 'type'>
face_FisherFaceRecognizer <class 'type'>
face_LBPHFaceRecognizer <class 'type'>
face_MACE <class 'type'>
face_PredictCollector <class 'type'>
face_StandardCollector <class 'type'>
fastAtan2 <class 'builtin_function_or_method'>
fastNlMeansDenoising <class 'builtin_function_or_method'>
fastNlMeansDenoisingColored <class 'builtin_function_or_method'>
fastNlMeansDenoisingColoredMulti <class 'builtin_function_or_method'>
fastNlMeansDenoisingMulti <class 'builtin_function_or_method'>
fillConvexPoly <class 'builtin_function_or_method'>
fillPoly <class 'builtin_function_or_method'>
filter2D <class 'builtin_function_or_method'>
filterHomographyDecompByVisibleRefpoints <class 'builtin_function_or_method'>
filterSpeckles <class 'builtin_function_or_method'>
find4QuadCornerSubpix <class 'builtin_function_or_method'>
findChessboardCorners <class 'builtin_function_or_method'>
findChessboardCornersSB <class 'builtin_function_or_method'>
findChessboardCornersSBWithMeta <class 'builtin_function_or_method'>
findCirclesGrid <class 'builtin_function_or_method'>
findContours <class 'builtin_function_or_method'>
findEssentialMat <class 'builtin_function_or_method'>
findFundamentalMat <class 'builtin_function_or_method'>
findHomography <class 'builtin_function_or_method'>
findNonZero <class 'builtin_function_or_method'>
findTransformECC <class 'builtin_function_or_method'>
fisheye <class 'module'>
fitEllipse <class 'builtin_function_or_method'>
fitEllipseAMS <class 'builtin_function_or_method'>
fitEllipseDirect <class 'builtin_function_or_method'>
fitLine <class 'builtin_function_or_method'>
flann <class 'module'>
flann_Index <class 'type'>
flip <class 'builtin_function_or_method'>
flipND <class 'builtin_function_or_method'>
floodFill <class 'builtin_function_or_method'>
ft <class 'module'>
gapi <class 'module'>
gapi_GNetPackage <class 'type'>
gapi_GNetParam <class 'type'>
gapi_ie_PyParams <class 'type'>
gapi_onnx_PyParams <class 'type'>
gapi_onnx_ep_CUDA <class 'type'>
gapi_onnx_ep_CoreML <class 'type'>
gapi_onnx_ep_DirectML <class 'type'>
gapi_onnx_ep_OpenVINO <class 'type'>
gapi_onnx_ep_TensorRT <class 'type'>
gapi_ot_ObjectTrackerParams <class 'type'>
gapi_ov_PyParams <class 'type'>
gapi_streaming_queue_capacity <class 'type'>
gapi_wip_GOutputs <class 'type'>
gapi_wip_IStreamSource <class 'type'>
gapi_wip_draw_Circle <class 'type'>
gapi_wip_draw_Image <class 'type'>
gapi_wip_draw_Line <class 'type'>
gapi_wip_draw_Mosaic <class 'type'>
gapi_wip_draw_Poly <class 'type'>
gapi_wip_draw_Rect <class 'type'>
gapi_wip_draw_Text <class 'type'>
gapi_wip_gst_GStreamerPipeline <class 'type'>
gemm <class 'builtin_function_or_method'>
getAffineTransform <class 'builtin_function_or_method'>
getBuildInformation <class 'builtin_function_or_method'>
getCPUFeaturesLine <class 'builtin_function_or_method'>
getCPUTickCount <class 'builtin_function_or_method'>
getDefaultNewCameraMatrix <class 'builtin_function_or_method'>
getDerivKernels <class 'builtin_function_or_method'>
getFontScaleFromHeight <class 'builtin_function_or_method'>
getGaborKernel <class 'builtin_function_or_method'>
getGaussianKernel <class 'builtin_function_or_method'>
getHardwareFeatureName <class 'builtin_function_or_method'>
getLogLevel <class 'builtin_function_or_method'>
getNumThreads <class 'builtin_function_or_method'>
getNumberOfCPUs <class 'builtin_function_or_method'>
getOptimalDFTSize <class 'builtin_function_or_method'>
getOptimalNewCameraMatrix <class 'builtin_function_or_method'>
getPerspectiveTransform <class 'builtin_function_or_method'>
getRectSubPix <class 'builtin_function_or_method'>
getRotationMatrix2D <class 'builtin_function_or_method'>
getStructuringElement <class 'builtin_function_or_method'>
getTextSize <class 'builtin_function_or_method'>
getThreadNum <class 'builtin_function_or_method'>
getTickCount <class 'builtin_function_or_method'>
getTickFrequency <class 'builtin_function_or_method'>
getTrackbarPos <class 'builtin_function_or_method'>
getValidDisparityROI <class 'builtin_function_or_method'>
getVersionMajor <class 'builtin_function_or_method'>
getVersionMinor <class 'builtin_function_or_method'>
getVersionRevision <class 'builtin_function_or_method'>
getVersionString <class 'builtin_function_or_method'>
getWindowImageRect <class 'builtin_function_or_method'>
getWindowProperty <class 'builtin_function_or_method'>
gin <class 'function'>
goodFeaturesToTrack <class 'builtin_function_or_method'>
goodFeaturesToTrackWithQuality <class 'builtin_function_or_method'>
grabCut <class 'builtin_function_or_method'>
groupRectangles <class 'builtin_function_or_method'>
hasNonZero <class 'builtin_function_or_method'>
haveImageReader <class 'builtin_function_or_method'>
haveImageWriter <class 'builtin_function_or_method'>
haveOpenVX <class 'builtin_function_or_method'>
hconcat <class 'builtin_function_or_method'>
hfs <class 'module'>
hfs_HfsSegment <class 'type'>
idct <class 'builtin_function_or_method'>
idft <class 'builtin_function_or_method'>
illuminationChange <class 'builtin_function_or_method'>
imcount <class 'builtin_function_or_method'>
imdecode <class 'builtin_function_or_method'>
imdecodemulti <class 'builtin_function_or_method'>
imencode <class 'builtin_function_or_method'>
img_hash <class 'module'>
img_hash_AverageHash <class 'type'>
img_hash_BlockMeanHash <class 'type'>
img_hash_ColorMomentHash <class 'type'>
img_hash_ImgHashBase <class 'type'>
img_hash_MarrHildrethHash <class 'type'>
img_hash_PHash <class 'type'>
img_hash_RadialVarianceHash <class 'type'>
importlib <class 'module'>
imread <class 'builtin_function_or_method'>
imreadmulti <class 'builtin_function_or_method'>
imshow <class 'builtin_function_or_method'>
imwrite <class 'builtin_function_or_method'>
imwritemulti <class 'builtin_function_or_method'>
inRange <class 'builtin_function_or_method'>
initCameraMatrix2D <class 'builtin_function_or_method'>
initInverseRectificationMap <class 'builtin_function_or_method'>
initUndistortRectifyMap <class 'builtin_function_or_method'>
inpaint <class 'builtin_function_or_method'>
insertChannel <class 'builtin_function_or_method'>
integral <class 'builtin_function_or_method'>
integral2 <class 'builtin_function_or_method'>
integral3 <class 'builtin_function_or_method'>
intensity_transform <class 'module'>
intersectConvexConvex <class 'builtin_function_or_method'>
invert <class 'builtin_function_or_method'>
invertAffineTransform <class 'builtin_function_or_method'>
ipp <class 'module'>
isContourConvex <class 'builtin_function_or_method'>
kinfu <class 'module'>
kinfu_KinFu <class 'type'>
kinfu_Params <class 'type'>
kinfu_Volume <class 'type'>
kinfu_VolumeParams <class 'type'>
kinfu_detail_PoseGraph <class 'type'>
kmeans <class 'builtin_function_or_method'>
large_kinfu <class 'module'>
large_kinfu_LargeKinfu <class 'type'>
large_kinfu_Params <class 'type'>
legacy <class 'module'>
legacy_MultiTracker <class 'type'>
legacy_Tracker <class 'type'>
legacy_TrackerBoosting <class 'type'>
legacy_TrackerCSRT <class 'type'>
legacy_TrackerKCF <class 'type'>
legacy_TrackerMIL <class 'type'>
legacy_TrackerMOSSE <class 'type'>
legacy_TrackerMedianFlow <class 'type'>
legacy_TrackerTLD <class 'type'>
line <class 'builtin_function_or_method'>
line_descriptor <class 'module'>
line_descriptor_BinaryDescriptor <class 'type'>
line_descriptor_BinaryDescriptorMatcher <class 'type'>
line_descriptor_DrawLinesMatchesFlags <class 'type'>
line_descriptor_KeyLine <class 'type'>
line_descriptor_LSDDetector <class 'type'>
line_descriptor_LSDParam <class 'type'>
linearPolar <class 'builtin_function_or_method'>
linemod <class 'module'>
linemod_ColorGradient <class 'type'>
linemod_DepthNormal <class 'type'>
linemod_Detector <class 'type'>
linemod_Feature <class 'type'>
linemod_Match <class 'type'>
linemod_Modality <class 'type'>
linemod_QuantizedPyramid <class 'type'>
linemod_Template <class 'type'>
load_config_py3 <class 'module'>
log <class 'builtin_function_or_method'>
logPolar <class 'builtin_function_or_method'>
magnitude <class 'builtin_function_or_method'>
matMulDeriv <class 'builtin_function_or_method'>
mat_wrapper <class 'module'>
matchShapes <class 'builtin_function_or_method'>
matchTemplate <class 'builtin_function_or_method'>
max <class 'builtin_function_or_method'>
mcc <class 'module'>
mcc_CChecker <class 'type'>
mcc_CCheckerDetector <class 'type'>
mcc_CCheckerDraw <class 'type'>
mcc_DetectorParameters <class 'type'>
mean <class 'builtin_function_or_method'>
meanShift <class 'builtin_function_or_method'>
meanStdDev <class 'builtin_function_or_method'>
medianBlur <class 'builtin_function_or_method'>
merge <class 'builtin_function_or_method'>
min <class 'builtin_function_or_method'>
minAreaRect <class 'builtin_function_or_method'>
minEnclosingCircle <class 'builtin_function_or_method'>
minEnclosingTriangle <class 'builtin_function_or_method'>
minMaxLoc <class 'builtin_function_or_method'>
misc <class 'module'>
mixChannels <class 'builtin_function_or_method'>
ml <class 'module'>
ml_ANN_MLP <class 'type'>
ml_Boost <class 'type'>
ml_DTrees <class 'type'>
ml_EM <class 'type'>
ml_KNearest <class 'type'>
ml_LogisticRegression <class 'type'>
ml_NormalBayesClassifier <class 'type'>
ml_ParamGrid <class 'type'>
ml_RTrees <class 'type'>
ml_SVM <class 'type'>
ml_SVMSGD <class 'type'>
ml_StatModel <class 'type'>
ml_TrainData <class 'type'>
moments <class 'builtin_function_or_method'>
morphologyEx <class 'builtin_function_or_method'>
motempl <class 'module'>
moveWindow <class 'builtin_function_or_method'>
mulSpectrums <class 'builtin_function_or_method'>
mulTransposed <class 'builtin_function_or_method'>
multicalib <class 'module'>
multiply <class 'builtin_function_or_method'>
namedWindow <class 'builtin_function_or_method'>
norm <class 'builtin_function_or_method'>
normalize <class 'builtin_function_or_method'>
numpy <class 'module'>
ocl <class 'module'>
ocl_Device <class 'type'>
ocl_OpenCLExecutionContext <class 'type'>
ogl <class 'module'>
omnidir <class 'module'>
optflow <class 'module'>
optflow_DenseRLOFOpticalFlow <class 'type'>
optflow_DualTVL1OpticalFlow <class 'type'>
optflow_GPCDetails <class 'type'>
optflow_GPCPatchDescriptor <class 'type'>
optflow_GPCPatchSample <class 'type'>
optflow_GPCTrainingSamples <class 'type'>
optflow_GPCTree <class 'type'>
optflow_OpticalFlowPCAFlow <class 'type'>
optflow_PCAPrior <class 'type'>
optflow_RLOFOpticalFlowParameter <class 'type'>
optflow_SparseRLOFOpticalFlow <class 'type'>
os <class 'module'>
parallel <class 'module'>
patchNaNs <class 'builtin_function_or_method'>
pencilSketch <class 'builtin_function_or_method'>
perspectiveTransform <class 'builtin_function_or_method'>
phase <class 'builtin_function_or_method'>
phaseCorrelate <class 'builtin_function_or_method'>
phase_unwrapping <class 'module'>
phase_unwrapping_HistogramPhaseUnwrapping <class 'type'>
phase_unwrapping_HistogramPhaseUnwrapping_Params <class 'type'>
phase_unwrapping_PhaseUnwrapping <class 'type'>
plot <class 'module'>
plot_Plot2d <class 'type'>
pointPolygonTest <class 'builtin_function_or_method'>
polarToCart <class 'builtin_function_or_method'>
pollKey <class 'builtin_function_or_method'>
polylines <class 'builtin_function_or_method'>
pow <class 'builtin_function_or_method'>
ppf_match_3d <class 'module'>
ppf_match_3d_ICP <class 'type'>
ppf_match_3d_PPF3DDetector <class 'type'>
ppf_match_3d_Pose3D <class 'type'>
ppf_match_3d_PoseCluster3D <class 'type'>
preCornerDetect <class 'builtin_function_or_method'>
projectPoints <class 'builtin_function_or_method'>
putText <class 'builtin_function_or_method'>
pyrDown <class 'builtin_function_or_method'>
pyrMeanShiftFiltering <class 'builtin_function_or_method'>
pyrUp <class 'builtin_function_or_method'>
quality <class 'module'>
quality_QualityBRISQUE <class 'type'>
quality_QualityBase <class 'type'>
quality_QualityGMSD <class 'type'>
quality_QualityMSE <class 'type'>
quality_QualityPSNR <class 'type'>
quality_QualitySSIM <class 'type'>
randShuffle <class 'builtin_function_or_method'>
randn <class 'builtin_function_or_method'>
randu <class 'builtin_function_or_method'>
rapid <class 'module'>
rapid_GOSTracker <class 'type'>
rapid_OLSTracker <class 'type'>
rapid_Rapid <class 'type'>
rapid_Tracker <class 'type'>
readOpticalFlow <class 'builtin_function_or_method'>
recoverPose <class 'builtin_function_or_method'>
rectangle <class 'builtin_function_or_method'>
rectangleIntersectionArea <class 'builtin_function_or_method'>
rectify3Collinear <class 'builtin_function_or_method'>
redirectError <class 'builtin_function_or_method'>
reduce <class 'builtin_function_or_method'>
reduceArgMax <class 'builtin_function_or_method'>
reduceArgMin <class 'builtin_function_or_method'>
reg <class 'module'>
reg_Map <class 'type'>
reg_MapAffine <class 'type'>
reg_MapProjec <class 'type'>
reg_MapShift <class 'type'>
reg_MapTypeCaster <class 'type'>
reg_Mapper <class 'type'>
reg_MapperGradAffine <class 'type'>
reg_MapperGradEuclid <class 'type'>
reg_MapperGradProj <class 'type'>
reg_MapperGradShift <class 'type'>
reg_MapperGradSimilar <class 'type'>
reg_MapperPyramid <class 'type'>
remap <class 'builtin_function_or_method'>
repeat <class 'builtin_function_or_method'>
reprojectImageTo3D <class 'builtin_function_or_method'>
resize <class 'builtin_function_or_method'>
resizeWindow <class 'builtin_function_or_method'>
rgbd <class 'module'>
rgbd_DepthCleaner <class 'type'>
rgbd_FastICPOdometry <class 'type'>
rgbd_ICPOdometry <class 'type'>
rgbd_Odometry <class 'type'>
rgbd_OdometryFrame <class 'type'>
rgbd_RgbdFrame <class 'type'>
rgbd_RgbdICPOdometry <class 'type'>
rgbd_RgbdNormals <class 'type'>
rgbd_RgbdOdometry <class 'type'>
rgbd_RgbdPlane <class 'type'>
rotate <class 'builtin_function_or_method'>
rotatedRectangleIntersection <class 'builtin_function_or_method'>
saliency <class 'module'>
saliency_MotionSaliency <class 'type'>
saliency_MotionSaliencyBinWangApr2014 <class 'type'>
saliency_Objectness <class 'type'>
saliency_ObjectnessBING <class 'type'>
saliency_Saliency <class 'type'>
saliency_StaticSaliency <class 'type'>
saliency_StaticSaliencyFineGrained <class 'type'>
saliency_StaticSaliencySpectralResidual <class 'type'>
samples <class 'module'>
sampsonDistance <class 'builtin_function_or_method'>
scaleAdd <class 'builtin_function_or_method'>
seamlessClone <class 'builtin_function_or_method'>
segmentation <class 'module'>
segmentation_IntelligentScissorsMB <class 'type'>
selectROI <class 'builtin_function_or_method'>
selectROIs <class 'builtin_function_or_method'>
sepFilter2D <class 'builtin_function_or_method'>
setIdentity <class 'builtin_function_or_method'>
setLogLevel <class 'builtin_function_or_method'>
setMouseCallback <class 'builtin_function_or_method'>
setNumThreads <class 'builtin_function_or_method'>
setRNGSeed <class 'builtin_function_or_method'>
setTrackbarMax <class 'builtin_function_or_method'>
setTrackbarMin <class 'builtin_function_or_method'>
setTrackbarPos <class 'builtin_function_or_method'>
setUseOpenVX <class 'builtin_function_or_method'>
setUseOptimized <class 'builtin_function_or_method'>
setWindowProperty <class 'builtin_function_or_method'>
setWindowTitle <class 'builtin_function_or_method'>
solve <class 'builtin_function_or_method'>
solveCubic <class 'builtin_function_or_method'>
solveLP <class 'builtin_function_or_method'>
solveP3P <class 'builtin_function_or_method'>
solvePnP <class 'builtin_function_or_method'>
solvePnPGeneric <class 'builtin_function_or_method'>
solvePnPRansac <class 'builtin_function_or_method'>
solvePnPRefineLM <class 'builtin_function_or_method'>
solvePnPRefineVVS <class 'builtin_function_or_method'>
solvePoly <class 'builtin_function_or_method'>
sort <class 'builtin_function_or_method'>
sortIdx <class 'builtin_function_or_method'>
spatialGradient <class 'builtin_function_or_method'>
split <class 'builtin_function_or_method'>
sqrBoxFilter <class 'builtin_function_or_method'>
sqrt <class 'builtin_function_or_method'>
stackBlur <class 'builtin_function_or_method'>
startWindowThread <class 'builtin_function_or_method'>
stereo <class 'module'>
stereoCalibrate <class 'builtin_function_or_method'>
stereoCalibrateExtended <class 'builtin_function_or_method'>
stereoRectify <class 'builtin_function_or_method'>
stereoRectifyUncalibrated <class 'builtin_function_or_method'>
stereo_MatchQuasiDense <class 'type'>
stereo_PropagationParameters <class 'type'>
stereo_QuasiDenseStereo <class 'type'>
structured_light <class 'module'>
structured_light_GrayCodePattern <class 'type'>
structured_light_SinusoidalPattern <class 'type'>
structured_light_SinusoidalPattern_Params <class 'type'>
structured_light_StructuredLightPattern <class 'type'>
stylization <class 'builtin_function_or_method'>
subtract <class 'builtin_function_or_method'>
sumElems <class 'builtin_function_or_method'>
sys <class 'module'>
text <class 'module'>
text_BaseOCR <class 'type'>
text_ERFilter <class 'type'>
text_ERFilter_Callback <class 'type'>
text_OCRBeamSearchDecoder <class 'type'>
text_OCRBeamSearchDecoder_ClassifierCallback <class 'type'>
text_OCRHMMDecoder <class 'type'>
text_OCRHMMDecoder_ClassifierCallback <class 'type'>
text_OCRTesseract <class 'type'>
text_TextDetector <class 'type'>
text_TextDetectorCNN <class 'type'>
textureFlattening <class 'builtin_function_or_method'>
threshold <class 'builtin_function_or_method'>
trace <class 'builtin_function_or_method'>
transform <class 'builtin_function_or_method'>
transpose <class 'builtin_function_or_method'>
transposeND <class 'builtin_function_or_method'>
triangulatePoints <class 'builtin_function_or_method'>
typing <class 'module'>
undistort <class 'builtin_function_or_method'>
undistortImagePoints <class 'builtin_function_or_method'>
undistortPoints <class 'builtin_function_or_method'>
undistortPointsIter <class 'builtin_function_or_method'>
useOpenVX <class 'builtin_function_or_method'>
useOptimized <class 'builtin_function_or_method'>
utils <class 'module'>
utils_ClassWithKeywordProperties <class 'type'>
utils_nested_ExportClassName <class 'type'>
utils_nested_ExportClassName_Params <class 'type'>
validateDisparity <class 'builtin_function_or_method'>
vconcat <class 'builtin_function_or_method'>
version <class 'module'>
videoio_registry <class 'module'>
videostab <class 'module'>
waitKey <class 'builtin_function_or_method'>
waitKeyEx <class 'builtin_function_or_method'>
warpAffine <class 'builtin_function_or_method'>
warpPerspective <class 'builtin_function_or_method'>
warpPolar <class 'builtin_function_or_method'>
watershed <class 'builtin_function_or_method'>
wechat_qrcode <class 'module'>
wechat_qrcode_WeChatQRCode <class 'type'>
writeOpticalFlow <class 'builtin_function_or_method'>
xfeatures2d <class 'module'>
xfeatures2d_AffineFeature2D <class 'type'>
xfeatures2d_BEBLID <class 'type'>
xfeatures2d_BoostDesc <class 'type'>
xfeatures2d_BriefDescriptorExtractor <class 'type'>
xfeatures2d_DAISY <class 'type'>
xfeatures2d_FREAK <class 'type'>
xfeatures2d_HarrisLaplaceFeatureDetector <class 'type'>
xfeatures2d_LATCH <class 'type'>
xfeatures2d_LUCID <class 'type'>
xfeatures2d_MSDDetector <class 'type'>
xfeatures2d_PCTSignatures <class 'type'>
xfeatures2d_PCTSignaturesSQFD <class 'type'>
xfeatures2d_SURF <class 'type'>
xfeatures2d_StarDetector <class 'type'>
xfeatures2d_TBMR <class 'type'>
xfeatures2d_TEBLID <class 'type'>
xfeatures2d_VGG <class 'type'>
ximgproc <class 'module'>
ximgproc_AdaptiveManifoldFilter <class 'type'>
ximgproc_ContourFitting <class 'type'>
ximgproc_DTFilter <class 'type'>
ximgproc_DisparityFilter <class 'type'>
ximgproc_DisparityWLSFilter <class 'type'>
ximgproc_EdgeAwareInterpolator <class 'type'>
ximgproc_EdgeBoxes <class 'type'>
ximgproc_EdgeDrawing <class 'type'>
ximgproc_EdgeDrawing_Params <class 'type'>
ximgproc_FastBilateralSolverFilter <class 'type'>
ximgproc_FastGlobalSmootherFilter <class 'type'>
ximgproc_FastLineDetector <class 'type'>
ximgproc_GuidedFilter <class 'type'>
ximgproc_RFFeatureGetter <class 'type'>
ximgproc_RICInterpolator <class 'type'>
ximgproc_RidgeDetectionFilter <class 'type'>
ximgproc_ScanSegment <class 'type'>
ximgproc_SparseMatchInterpolator <class 'type'>
ximgproc_StructuredEdgeDetection <class 'type'>
ximgproc_SuperpixelLSC <class 'type'>
ximgproc_SuperpixelSEEDS <class 'type'>
ximgproc_SuperpixelSLIC <class 'type'>
ximgproc_segmentation_GraphSegmentation <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentation <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentationStrategy <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentationStrategyColor <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentationStrategyFill <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentationStrategyMultiple <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentationStrategySize <class 'type'>
ximgproc_segmentation_SelectiveSearchSegmentationStrategyTexture <class 'type'>
xphoto <class 'module'>
xphoto_GrayworldWB <class 'type'>
xphoto_LearningBasedWB <class 'type'>
xphoto_SimpleWB <class 'type'>
xphoto_TonemapDurand <class 'type'>
xphoto_WhiteBalancer <class 'type'>

哇, 功能真的非常多啊! 其中最常用的是圖檔讀寫相關的函式 :
  • imread() : 讀取圖檔
  • imwrite() : 將圖形物件輸出為圖檔
  • imshow() : 顯示圖檔
  • waitKey() : 控制顯示視窗關閉時機
  • destroyAllWindows() : 關閉全部 cv2 開啟的圖形視窗

2024年1月30日 星期二

參加茶米老師的 AIGC 生成式內容多媒體應用首部曲 Vrew 分享會

晚上參加茶米老師的 AI 影音剪輯工具分享會 (還好有滑臉書), 介紹一套很棒的工具 Vrew, 它最大的亮點是利用 AI 分析影片中的音訊, 產生字幕逐字稿, 我們可以直接編輯字幕, 刪除不要的字, 它會同步刪掉對應的視訊, 在字幕編輯器中按 Enter 跳行就自動切割視訊, 這實在太方便了, 比甚麼威力導演還要威! AI 的出現已為數位生活帶來翻山倒海的改變! 

Vrew 這套 AI 剪輯軟體需下載安裝, 可註冊免費帳戶, 使用上的雖然有些限制, 但對一般應用來說也算足夠了, 下載網址 : 


課程中用到的材料可從雲端硬碟下載 : 


註 : 今日起茶米老師連續三天晚上 19:00 開講, 課程連結:

【線上】1/30(19:00-21:00)-黃信溢-AIGC生成式內容多媒體應用首部曲Vrew - AI 影音剪輯酷兵器


【線上】1/31(19:00-21:00)-黃信愷-AIGC生成式內容多媒體應用二部曲 Leonardo:揭開 AI 繪圖大師的魔法面紗

【線上】2/1(19:00-21:00)-黃信愷-AIGC生成式內容多媒體應用三部曲 Clipchamp:AI 影音編輯新體驗


2024-01-31 補充 : 

今天上 Leonardo 要註冊帳戶才發現去年在益師傅分享會我就註冊使用過了, Leonardo 每天 150 點可用真的很佛心, 付費使用 API 最低才 9 美元. 

2023年11月24日 星期五

好站 : 用 tinypng 壓縮圖檔

最近在 Hahow 企業版上互動網頁課程時得知 tinypng 這個好用的線上工具 : 


只要將圖檔 (png, jpg, bmp 均可) 拖曳到中間的方框內即可 :





原本 176KB 的圖檔經過壓縮後變成 46KB, 縮小了七成, 按 Download 即可下載, 開啟後檢視圖片品質並沒有顯著差異, 實在太棒了. 

2022年7月10日 星期日

Python 學習筆記 : 用 Pillow 處理圖片

我在去年初為了還一本書整理了其中 Pillow 套件的用法, 參考 :


但最近在研究如何裁切 Matplotlib 所繪製的表格圖片時, 發現該書介紹的 Pillow 內容較少, 例如要用到的 crop() 方法就沒介紹, 所以將其重要用法重新整理, 參考書籍如下 :  

# Python 自動化的樂趣 (碁峰 2017) 第 17 章

Pillow 官方文件參考 : 


Pillow 套件在大量圖檔的處理自動化上非常有用. 


一. PIL 套件中的常用模組 : 


 PIL 套件常用模組 說明
 ImageColor 色彩表示方式的轉換
 Image 圖片處理模組
 ImageDraw 繪圖模組
 ImageFont 字型模組


其中 Image 是主要的影像處理模組, ImageDraw 與 ImageColor 則是繪圖模組, 而 ImageColor 則是轉換色彩表示法的輔助模組. 


二. ImageColor 模組用法 : 

此模組主要用來做光影色彩表示方式的轉換, 可將下列 3 種顏色字串 (大小寫均可) 轉成 10 進位的色碼 tuple, 因為 Pillow 套件的圖片處理模組 Image 與繪圖模組 ImageDraw 中的物件方法會用到色碼元組當參數 :
  • 16 進位色碼字串 : 例如 "#ff0000" 或 "#FF0000"
  • 色彩名稱字串 : 例如 "RED" 或 'red'
  • rgb() 函式字串 : 例如 'rgb(255, 0, 0)' 或 'rgb(100%, 0%, 0%)'
注意, 電腦程式都是使用 RGB 加色法模型 (additive color model), 因為螢幕是光的呈現, 而光是以加色法原理顯色的, 這有別於塗料或印刷所使用的減色法模型 (subtractive color model), 此模型使用 CMYK (青, 洋紅, 黃, 黑) 四種顏色來混出各種顏色.  

首先用 Python 小工具 members.py 模組來查詢其公開成員, 關於 members 模組參考 : 


將 members.py 下載到目前工作目錄後呼叫其 list_members() 函式即可得到其公開成員列表 :

>>> from PIL import ImageColor   
>>> import members as mbr   
>>> mbr.list_members(ImageColor)      
Image <class 'module'>
colormap <class 'dict'>
getcolor <class 'function'>
getrgb <class 'function'>
re <class 'module'>

可見 PIL 套件的 ImageColor 模組有 5 個公開成員, 其中 Image 與 re 都是匯入的模組, colormap 是定義顏色名稱與其對應 16 進位色碼的字典 :

>>> from PIL import ImageColor    
>>> ImageColor.colormap   
{'aliceblue': '#f0f8ff', 'antiquewhite': '#faebd7', 'aqua': '#00ffff', .... (略)

而 getrgb() 與 getcolor() 則為顏色字串轉成 10 進位的 RGB 色碼 tuple, 兩個函式功能類似, 差別只是 getColor() 多了一個 mode 參數可選擇要傳回 RGB 還是 RGBA 的 tuple, 其中 A 是 0~255 的透明度數值, 0 為全透明 (這時不管 R, G, B 值為多少都看不到顏色), 255 為完全不透明, 這要 PNG 檔才有支援. 其語法如下 :

ImageColor.getrgb(color)      
ImageColor.getcolor(color, mode)      

其中 color 為上述的三種色彩描述字串, mode 為傳回值之模式字串, getcolor() 必須傳入這兩個參數, mode 可傳入 'RGB' (JPG 檔) 或 'RGBA' (PNG 檔), 前者傳回 (R, G, B) 元組, 後者傳回 (R, G, B, A) 元組. 顏色字串參數 color 不分大小寫, 即 'red' 或 'RED', '#ff0000' 或 '#FF0000' 皆可. 

Pillow 的色彩名稱採用了 HTML 的色彩名稱, 參考 : 


getrgb() 函式只會傳回 (R, G, B) 元組, 例如 : 

>>> ImageColor.getrgb('#ff0000')   
(255, 0, 0)
>>> ImageColor.getrgb('#0000FF')    
(0, 0, 255)
>>> ImageColor.getrgb('yellow')  
(255, 255, 0)
>>> ImageColor.getrgb('YELLOW')   
(255, 255, 0)
>>> ImageColor.getrgb('rgb(255, 0, 0)')    
(255, 0, 0)
>>> ImageColor.getrgb('RGB(255, 0, 0)')    
(255, 0, 0)

getcolor() 則會根據 mode 傳回 RGB 或 RGBA 元組, 例如 : 

>>> ImageColor.getcolor('#ff0000', 'RGBA')   
(255, 0, 0, 255)
>>> ImageColor.getcolor('#ff0000', 'RGB')       
(255, 0, 0)
>>> ImageColor.getcolor('yellow', 'RGB')   
(255, 255, 0)
>>> ImageColor.getcolor('yellow', 'RGBA')    
(255, 255, 0, 255)

注意, 'RGBA' 模式傳回的 A 都是 255 (不透明), 這樣 R, G, B 設定才會完全顯色. 


三. Image 模組用法 : 

Image 模組是 PIL 套件中的圖像處理主體, 教學文件參考 :


可用 members 模組的 list_members() 函式來檢視其公開成員 : 

>>> from PIL import Image
>>> import members as mbr
>>> mbr.list_members(Image)    
ADAPTIVE <class 'int'>
AFFINE <class 'int'>
ANTIALIAS <class 'int'>
BICUBIC <class 'int'>
BILINEAR <class 'int'>
BOX <class 'int'>
CONTAINER <class 'int'>
CUBIC <class 'int'>
Callable <class 'abc.ABCMeta'>
DECODERS <class 'dict'>
DEFAULT_STRATEGY <class 'int'>
DecompressionBombError <class 'type'>
DecompressionBombWarning <class 'type'>
ENCODERS <class 'dict'>
EXTENSION <class 'dict'>
EXTENT <class 'int'>
Exif <class 'abc.ABCMeta'>
FASTOCTREE <class 'int'>
FILTERED <class 'int'>
FIXED <class 'int'>
FLIP_LEFT_RIGHT <class 'int'>
FLIP_TOP_BOTTOM <class 'int'>
FLOYDSTEINBERG <class 'int'>
HAMMING <class 'int'>
HUFFMAN_ONLY <class 'int'>
ID <class 'list'>
Image <class 'type'>
ImageMode <class 'module'>
ImagePointHandler <class 'type'>
ImageTransformHandler <class 'type'>
LANCZOS <class 'int'>
LIBIMAGEQUANT <class 'int'>
LINEAR <class 'int'>
MAXCOVERAGE <class 'int'>
MAX_IMAGE_PIXELS <class 'int'>
MEDIANCUT <class 'int'>
MESH <class 'int'>
MIME <class 'dict'>
MODES <class 'list'>
MutableMapping <class 'abc.ABCMeta'>
NEAREST <class 'int'>
NONE <class 'int'>
NORMAL <class 'int'>
OPEN <class 'dict'>
ORDERED <class 'int'>
PERSPECTIVE <class 'int'>
Path <class 'type'>
QUAD <class 'int'>
RASTERIZE <class 'int'>
RLE <class 'int'>
ROTATE_180 <class 'int'>
ROTATE_270 <class 'int'>
ROTATE_90 <class 'int'>
SAVE <class 'dict'>
SAVE_ALL <class 'dict'>
SEQUENCE <class 'int'>
TRANSPOSE <class 'int'>
TRANSVERSE <class 'int'>
TiffTags <class 'module'>
USE_CFFI_ACCESS <class 'bool'>
UnidentifiedImageError <class 'type'>
WEB <class 'int'>
alpha_composite <class 'function'>
atexit <class 'module'>
blend <class 'function'>
builtins <class 'module'>
cffi <class 'module'>
coerce_e <class 'function'>
composite <class 'function'>
core <class 'module'>
deferred_error <class 'type'>
effect_mandelbrot <class 'function'>
effect_noise <class 'function'>
eval <class 'function'>
fromarray <class 'function'>
frombuffer <class 'function'>
frombytes <class 'function'>
fromqimage <class 'function'>
fromqpixmap <class 'function'>
getmodebandnames <class 'function'>
getmodebands <class 'function'>
getmodebase <class 'function'>
getmodetype <class 'function'>
i32le <class 'function'>
init <class 'function'>
io <class 'module'>
isImageType <class 'function'>
isPath <class 'function'>
linear_gradient <class 'function'>
logger <class 'logging.Logger'>
logging <class 'module'>
math <class 'module'>
merge <class 'function'>
new <class 'function'>
numbers <class 'module'>
open <class 'function'>
os <class 'module'>
preinit <class 'function'>
radial_gradient <class 'function'>
register_decoder <class 'function'>
register_encoder <class 'function'>
register_extension <class 'function'>
register_extensions <class 'function'>
register_mime <class 'function'>
register_open <class 'function'>
register_save <class 'function'>
register_save_all <class 'function'>
registered_extensions <class 'function'>
struct <class 'module'>
sys <class 'module'>
tempfile <class 'module'>
warnings <class 'module'>
xml <class 'module'>

雖然成員眾多, 但實際上常用的函式是下面兩個 :


 Image 模組常用函式 說明
 new(mode, size, color=0) 建立新的圖片物件, mode='RGB' 或 'RGBA', size=(w, h), 預設黑色
 open(filename) 開啟指定檔名之圖檔


new() 會依據傳入參數 mode 建立一個 Image 物件, 若要建立無透明度的 JPEG 檔須傳入 mode='RGB', 若要建立有透明度的 PNG 檔則傳入 mode='RGBA', 參數 size 為一個 (寬度, 高度) 畫素元組, 參數 color 可用色彩名例如 'yellow' 或色碼 '#ffff00' (不分大小寫), 如果沒有傳入 color, 預設是黑色背景 (color=0). 例如 : 

>>> img=Image.new('RGB', (300, 200), 'yellow')   # 300*200 px 黃底
>>> type(img)     
<class 'PIL.Image.Image'>      

此 Image 物件有一個 save() 方法可將物件存成圖片檔案, 例如 : 

>>> img.save('test.jpg')     

這時目前工作目錄下就會出現 300x200 黃底的 test.jpg 圖檔了 :




而 open() 函式則用來開啟已存在的圖檔, 以下範例使用我家的三隻小貓圖片 : 


例如 : 

>>> img=Image.open('kitten.jpg')    
>>> type(img)     
<class 'PIL.Image.Image'> 

可見 open() 也是傳回一個 Image 物件. 然後呼叫此物件之 show() 方法會啟動預設看圖軟體顯示此圖片, 例如 : 

>>> img.show()   

結果如下 : 



 
接下來進一步來檢視 Image 物件, 可呼叫 members 模組的 list_members() 函式並傳入上面已建立的 Image 物件即可檢視其有公開成員 : 

>>> import members as mbr   
>>> mbr.list_members(img)    
alpha_composite <class 'method'>
category <class 'int'>
close <class 'method'>
convert <class 'method'>
copy <class 'method'>
crop <class 'method'>
draft <class 'method'>
effect_spread <class 'method'>
entropy <class 'method'>
filter <class 'method'>
format <class 'NoneType'>
format_description <class 'NoneType'>
frombytes <class 'method'>
getbands <class 'method'>
getbbox <class 'method'>
getchannel <class 'method'>
getcolors <class 'method'>
getdata <class 'method'>
getexif <class 'method'>
getextrema <class 'method'>
getim <class 'method'>
getpalette <class 'method'>
getpixel <class 'method'>
getprojection <class 'method'>
height <class 'int'>
histogram <class 'method'>
im <class 'ImagingCore'>
info <class 'dict'>
load <class 'method'>
mode <class 'str'>
palette <class 'NoneType'>
paste <class 'method'>
point <class 'method'>
putalpha <class 'method'>
putdata <class 'method'>
putpalette <class 'method'>
putpixel <class 'method'>
pyaccess <class 'NoneType'>
quantize <class 'method'>
readonly <class 'int'>
reduce <class 'method'>
remap_palette <class 'method'>
resize <class 'method'>
rotate <class 'method'>
save <class 'method'>
seek <class 'method'>
show <class 'method'>
size <class 'tuple'>
split <class 'method'>
tell <class 'method'>
thumbnail <class 'method'>
tobitmap <class 'method'>
tobytes <class 'method'>
toqimage <class 'method'>
toqpixmap <class 'method'>
transform <class 'method'>
transpose <class 'method'>
verify <class 'method'>
width <class 'int'>

Image 物件的常用屬性如下 : 

 Image 物件常用屬性 說明
 width 圖片寬度 (px)
 height 圖片高度 (px)
 size 圖片寬度與高度組成之 tuple (px)
 format 圖片格式 (字串), 例如 'PNG', 'JPG' 等
 format_description 圖片格式的描述 (字串), 例如 'Potable network graphics'
 info 圖片資訊字典, 包含 dpi 等訊息
 mode 圖片模式 (字串), 例如 'RGB' 或 'RGBN' 

Image 物件的常用方法如下 : 

 Image 物件常用方法 說明
 save(filename) 將物件存成圖檔
 show() 以作業系統預設看圖軟體顯示圖片物件
 crop(box)  剪裁圖片只留下 box 區域之像素, box 為 (左, 上, 右, 下) 座標元組
 copy() 複製圖片物件 (傳回新的 Image 物件)
 paste(image, (x, y)) 在圖片物件左上座標 (x, y) 貼上 image 物件 (圖片會被更改)
 resize((w, h)) 調整圖片物件為指定寬高尺寸 tuple (w, h) 後傳回新圖片物件
 rotate(d [, expand=False]) 將圖片逆時針旋轉 d 角度後傳回新圖片物件, expand=是否放大版面
 transpose(method) 將圖片做逕向翻轉後傳回新圖片物件, method=0 (左右), 1 (上下)
 getpixel((x, y)) 取得座標 (x, y) 的像素值, 傳回 (R, G, B) 或 (R, G, B, A) 元組
 putpixel((x, y), color) 在座標 (x, y) 填入像素色彩值 color=(R, G, B) 或 (R, G, B, A)
 convert(mode) 依據指定模式轉換圖片, 傳回新圖片物件. mode=1 轉成黑白圖片
 split() 將圖片中的 RGB 三原色分離為三個 Image 物件, 傳回 (R, G, B) 元組
 merge(mode, bands) 將單通道圖像 bands 以指定 mode 合併傳回新圖片物件

首先來測試 Image 物件的屬性, 例如 : 

>>> img=Image.open('kitten.jpg')   
>>> img.width   
918
>>> img.height   
446
>>> img.size       
(918, 446)
>>> img.mode    
'RGB'
>>> img.format     
'JPEG'
>>> img.format_description   
'JPEG (ISO 10918)'
>>> img.info   
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (300, 300), 'jfif_unit': 1, 'jfif_density': (300, 300)}

接下來測試 Image 物件的方法, 其中 save() 與 show() 已在上面測試過不再重複. 


1. 裁切圖片 :

呼叫 Image 物件的 crop(box) 方法即可依照傳入參數將指定區域 box 裁切出來成為新圖片物件傳回, 原物件不受影響. 參數 box 是 (x1, y1, x2, y2) 的座標區域, 其中 (x1, y1) 為左上角座標, (x2, y2) 為右下角座標. 注意, 裁切時不包含 (x2, y2) 這個像素點以及這一列與這一行之像素, 就像 range(1, 5) 不包含 5 一樣.  

以上面三隻小貓圖片為例, 若要將最右邊那隻小貓的頭像裁切出來的話, 可先用小畫家或 Picpick 之類的圖片編輯軟體找出要裁切區域的上左下右座標, 然後組成要傳入 cro() 的 box 元組, 例如此處的欲裁切區域是 box=(532, 165, 747, 382) : 




然後呼叫 crop() 方法進行裁切 : 

>>> kitten_right=img.crop((532, 165, 747, 382))    
>>> kitten_right.show()      

結果如下 : 




參考 :

# “python clip image ” Code Answer


2. 複製圖片 :

呼叫 Image 物件的 copy() 方法會傳回該物件的副本物件 (新物件), 例如 :

>>> img2=img.copy()      
>>> img   
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=918x446 at 0x219B41F5828>
>>> img2     
<PIL.Image.Image image mode=RGB size=918x446 at 0x219B42083C8> 
>>> img.size   
(918, 446)
>>> img2.size   
(918, 446)

可見 copy() 會傳回尺寸一樣的新 Image 物件, 呼叫 img2.show() 可知同樣是三隻小貓圖片. 


3. 貼上圖片 :

呼叫 Image 物件的 paste(img, (x, y)) 方法會在圖片中指定的 (x, y) 左上座標處貼上傳入之另一個圖片物件. 注意, paste() 不會傳回新圖片, 而是直接更改原圖片物件. 例如可將上面裁切下來的最右邊小貓頭像 kitten_right 貼到圖片副本 img2 中 :

>>> img2.paste(kitten_right, (687, 13))   
>>> img2.show()    

結果如下 : 




可見貓咪頭像被貼在左上角座標 (687, 13) 的位置. 注意, 以上複製貼上均為物件操作, 並未使用到作業系統的剪貼簿. 


4. 更改圖片尺寸 :

呼叫 Image 物件的 resize((w, h)) 方法會調整圖片的尺寸為寬 w 高 h 的新圖片後傳回, 例如上面三隻小貓的圖片 img 尺寸為 (918, 446), 可用 resize() 將其縮小為長寬各一半 (即 1/4)  :

>>> w, h=img.size  
>>> w, h   
(918, 446)   
>>> img3=img.resize((int(w/2), int(h/2)))      
>>> img3.size      
(459, 223)   

此處先用 size 屬性取得原圖 img 的寬與高 (w, h)=(918, 446), 然後呼叫 resize() 時將寬高都除以 2 以元組傳入, 傳回值為面積縮小為原圖 1/4 的新圖片物件, 尺寸為 (459, 223). 注意, resize((w, h)) 的傳入參數是 tuple (w, h), 不是 resize(w, h), 這樣會出現錯誤.