顯示具有 OpenCV 標籤的文章。 顯示所有文章
顯示具有 OpenCV 標籤的文章。 顯示所有文章

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 開啟的圖形視窗

2020年7月3日 星期五

樹莓派安裝 OpenCV 4

我的樹莓派視訊鏡頭買來很久了, 但是一直沒時間安裝上去 (要花點時間研究怎麼裝), 今天在下面這本書裡面看到如何在樹莓派上安裝 OpenCV 4, 看起來超乎我想像的簡單, 只需要兩道指令即可, 所以就迫不及待地在 Pi Zero W 上試試看.

# Raspberry Pi Computer Vision Programming, 2nd Edition (Packt, 2020)


Source : Packt


此書首先詳細說明如何安裝 Raspbian 最新版 Buster, 以及如何設定 SSH 與 WiFi 介面以便進行無頭存取. Buster 內建了 Python 3.7.3 以及好用的 Thonny 編輯器.


1. 安裝相依模組 :

$ sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test 

2. 安裝 Open CV 4 套件 :

$ pip3 install opencv-python

安裝過程如下 :

pi@raspberrypi:~ $ sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test 
正在讀取套件清單... 完成
正在重建相依關係
正在讀取狀態資料... 完成
Note, selecting 'libhdf5-dev' instead of 'libhdf5-serial-dev'
下列的額外套件將被安裝:
  hdf5-helpers libaec-dev libaec0 libatlas3-base libaudio2 libhdf5-103
  libhdf5-cpp-103 libjasper1 libjpeg8 libmng1 libqt4-dbus libqt4-xml
  libqtcore4 libqtdbus4 libsz2 qdbus qt-at-spi qtchooser qtcore4-l10n
建議套件:
  libatlas-doc liblapack-doc nas libhdf5-doc libjasper-runtime libicu57
  qt4-qtconfig
下列【新】套件將會被安裝:
  hdf5-helpers libaec-dev libaec0 libatlas-base-dev libatlas3-base libaudio2
  libhdf5-103 libhdf5-cpp-103 libhdf5-dev libjasper-dev libjasper1 libjpeg8
  libmng1 libqt4-dbus libqt4-test libqt4-xml libqtcore4 libqtdbus4 libqtgui4
  libsz2 qdbus qt-at-spi qtchooser qtcore4-l10n
升級 0 個,新安裝 24 個,移除 0 個,有 200 個未被升級。
需要下載 16.1 MB 的套件檔。
此操作完成之後,會多佔用 69.4 MB 的磁碟空間。
下載:1 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libjasper1 armhf 1.900.1-debian1-2.4+deb8u1 [110 kB]
下載:2 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libjpeg8 armhf 8d1-2 [108 kB]
下載:3 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libmng1 armhf 1.0.10+dfsg-3.1 [164 kB]
下載:4 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf hdf5-helpers armhf 1.10.4+repack-10 [35.2 kB]
下載:5 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libaec0 armhf 1.0.2-1 [21.3 kB]
下載:6 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libsz2 armhf 1.0.2-1 [6,640 B]
下載:7 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libaec-dev armhf 1.0.2-1 [19.1 kB]
下載:8 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libatlas3-base armhf 3.10.3-8+rpi1 [2,399 kB]
下載:9 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libatlas-base-dev armhf 3.10.3-8+rpi1 [2,966 kB]
下載:10 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libaudio2 armhf 1.9.4-6 [72.7 kB]
下載:11 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libhdf5-103 armhf 1.10.4+repack-10 [1,259 kB]
下載:12 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libhdf5-cpp-103 armhf 1.10.4+repack-10 [121 kB]
下載:13 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libhdf5-dev armhf 1.10.4+repack-10 [2,221 kB]
下載:14 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libjasper-dev armhf 1.900.1-debian1-2.4+deb8u1 [501 kB]
下載:15 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qtcore4-l10n all 4:4.8.7+dfsg-18+rpi1 [662 kB]
下載:16 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqtcore4 armhf 4:4.8.7+dfsg-18+rpi1 [1,361 kB]
下載:17 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqt4-xml armhf 4:4.8.7+dfsg-18+rpi1 [127 kB]
下載:18 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqtdbus4 armhf 4:4.8.7+dfsg-18+rpi1 [194 kB]
下載:19 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qtchooser armhf 66-2 [23.1 kB]
下載:20 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qdbus armhf 4:4.8.7+dfsg-18+rpi1 [73.0 kB]
下載:21 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqt4-dbus armhf 4:4.8.7+dfsg-18+rpi1 [54.0 kB]
下載:22 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqt4-test armhf 4:4.8.7+dfsg-18+rpi1 [97.8 kB]
下載:23 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqtgui4 armhf 4:4.8.7+dfsg-18+rpi1 [3,408 kB]
下載:24 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qt-at-spi armhf 0.4.0-9 [48.3 kB]
取得 16.1 MB 用了 19s (840 kB/s)
選取了原先未選的套件 libjasper1:armhf。
(讀取資料庫 ... 目前共安裝了 156648 個檔案和目錄。)
正在準備解包 .../00-libjasper1_1.900.1-debian1-2.4+deb8u1_armhf.deb……
Unpacking libjasper1:armhf (1.900.1-debian1-2.4+deb8u1) ...
選取了原先未選的套件 libjpeg8:armhf。
正在準備解包 .../01-libjpeg8_8d1-2_armhf.deb……
Unpacking libjpeg8:armhf (8d1-2) ...
選取了原先未選的套件 libmng1:armhf。
正在準備解包 .../02-libmng1_1.0.10+dfsg-3.1_armhf.deb……
Unpacking libmng1:armhf (1.0.10+dfsg-3.1) ...
選取了原先未選的套件 hdf5-helpers。
正在準備解包 .../03-hdf5-helpers_1.10.4+repack-10_armhf.deb……
Unpacking hdf5-helpers (1.10.4+repack-10) ...
選取了原先未選的套件 libaec0:armhf。
正在準備解包 .../04-libaec0_1.0.2-1_armhf.deb……
Unpacking libaec0:armhf (1.0.2-1) ...
選取了原先未選的套件 libsz2:armhf。
正在準備解包 .../05-libsz2_1.0.2-1_armhf.deb……
Unpacking libsz2:armhf (1.0.2-1) ...
選取了原先未選的套件 libaec-dev:armhf。
正在準備解包 .../06-libaec-dev_1.0.2-1_armhf.deb……
Unpacking libaec-dev:armhf (1.0.2-1) ...
選取了原先未選的套件 libatlas3-base:armhf。
正在準備解包 .../07-libatlas3-base_3.10.3-8+rpi1_armhf.deb……
Unpacking libatlas3-base:armhf (3.10.3-8+rpi1) ...
選取了原先未選的套件 libatlas-base-dev:armhf。
正在準備解包 .../08-libatlas-base-dev_3.10.3-8+rpi1_armhf.deb……
Unpacking libatlas-base-dev:armhf (3.10.3-8+rpi1) ...
選取了原先未選的套件 libaudio2:armhf。
正在準備解包 .../09-libaudio2_1.9.4-6_armhf.deb……
Unpacking libaudio2:armhf (1.9.4-6) ...
選取了原先未選的套件 libhdf5-103:armhf。
正在準備解包 .../10-libhdf5-103_1.10.4+repack-10_armhf.deb……
Unpacking libhdf5-103:armhf (1.10.4+repack-10) ...
選取了原先未選的套件 libhdf5-cpp-103:armhf。
正在準備解包 .../11-libhdf5-cpp-103_1.10.4+repack-10_armhf.deb……
Unpacking libhdf5-cpp-103:armhf (1.10.4+repack-10) ...
選取了原先未選的套件 libhdf5-dev。
正在準備解包 .../12-libhdf5-dev_1.10.4+repack-10_armhf.deb……
Unpacking libhdf5-dev (1.10.4+repack-10) ...
選取了原先未選的套件 libjasper-dev。
正在準備解包 .../13-libjasper-dev_1.900.1-debian1-2.4+deb8u1_armhf.deb……
Unpacking libjasper-dev (1.900.1-debian1-2.4+deb8u1) ...
選取了原先未選的套件 qtcore4-l10n。
正在準備解包 .../14-qtcore4-l10n_4%3a4.8.7+dfsg-18+rpi1_all.deb……
Unpacking qtcore4-l10n (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqtcore4:armhf。
正在準備解包 .../15-libqtcore4_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqtcore4:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqt4-xml:armhf。
正在準備解包 .../16-libqt4-xml_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqt4-xml:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqtdbus4:armhf。
正在準備解包 .../17-libqtdbus4_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqtdbus4:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 qtchooser。
正在準備解包 .../18-qtchooser_66-2_armhf.deb……
Unpacking qtchooser (66-2) ...
選取了原先未選的套件 qdbus。
正在準備解包 .../19-qdbus_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking qdbus (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqt4-dbus:armhf。
正在準備解包 .../20-libqt4-dbus_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqt4-dbus:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqt4-test:armhf。
正在準備解包 .../21-libqt4-test_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqt4-test:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqtgui4:armhf。
正在準備解包 .../22-libqtgui4_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqtgui4:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 qt-at-spi:armhf。
正在準備解包 .../23-qt-at-spi_0.4.0-9_armhf.deb……
Unpacking qt-at-spi:armhf (0.4.0-9) ...
設定 libjpeg8:armhf (8d1-2) ...
設定 libmng1:armhf (1.0.10+dfsg-3.1) ...
設定 libatlas3-base:armhf (3.10.3-8+rpi1) ...
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/libblas.so.3 來提供 /usr/lib/arm-linux-gnueabihf/libblas.so.3 (libblas.so.3-arm-linux-gnueabihf)
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/liblapack.so.3 來提供 /usr/lib/arm-linux-gnueabihf/liblapack.so.3 (liblapack.so.3-arm-linux-gnueabihf)
設定 hdf5-helpers (1.10.4+repack-10) ...
設定 libatlas-base-dev:armhf (3.10.3-8+rpi1) ...
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/libblas.so 來提供 /usr/lib/arm-linux-gnueabihf/libblas.so (libblas.so-arm-linux-gnueabihf)
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/liblapack.so 來提供 /usr/lib/arm-linux-gnueabihf/liblapack.so (liblapack.so-arm-linux-gnueabihf)
設定 libaec0:armhf (1.0.2-1) ...
設定 libaudio2:armhf (1.9.4-6) ...
設定 libjasper1:armhf (1.900.1-debian1-2.4+deb8u1) ...
設定 libjasper-dev (1.900.1-debian1-2.4+deb8u1) ...
設定 qtchooser (66-2) ...
設定 libsz2:armhf (1.0.2-1) ...
設定 qtcore4-l10n (4:4.8.7+dfsg-18+rpi1) ...
設定 libaec-dev:armhf (1.0.2-1) ...
設定 libhdf5-103:armhf (1.10.4+repack-10) ...
設定 libqtcore4:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libqtgui4:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libhdf5-cpp-103:armhf (1.10.4+repack-10) ...
設定 libqt4-xml:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libqt4-test:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libhdf5-dev (1.10.4+repack-10) ...
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/pkgconfig/hdf5-serial.pc 來提供 /usr/lib/arm-linux-gnueabihf/pkgconfig/hdf5.pc (hdf5.pc)
設定 libqtdbus4:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 qdbus (4:4.8.7+dfsg-18+rpi1) ...
設定 libqt4-dbus:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 qt-at-spi:armhf (0.4.0-9) ...
執行 man-db (2.8.5-2) 的觸發程式……
執行 libc-bin (2.28-10+rpi1) 的觸發程式……
pi@raspberrypi:~ $
pi@raspberrypi:~ $ pip3 install opencv-python     
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-python
  Downloading https://www.piwheels.org/simple/opencv-python/opencv_python-4.1.1.26-cp37-cp37m-linux_armv6l.whl (9.4MB)
Requirement already satisfied: numpy>=1.16.2 in /usr/lib/python3/dist-packages (from opencv-python) (1.16.2)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.1.1.26

看來可以正式來學習 OpenCV 4 了, 但是我 import cv2 卻出現下列錯誤訊息 :

Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> import cv2   
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import cv2
  File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
ImportError: /home/pi/.local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8

求助 Google 大神, 找到下面這篇, 其中有人回應說樹莓派還未支援 OpenCV 4, 建議安裝 3.4.6.27 就沒問題了, 參考 : 


其實上面那本書上是安裝 4.0.1.24 版 :

pip3 install opencv-python==4.0.1.24 

只好移除最新版, 重新安裝 4.0.1.24 版看看.

參考 :

# Install OpenCV 4 on your Raspberry Pi