---
tags: 機器視覺, OpenCV, 勇哥, Yungger, Python
---
:::info
# Python+OpenCV : 第一課
:::
:::warning
### 目錄
[TOC]
:::
---
安裝套件
---
$ pip3 install opencv-python
$ pip3 install opencv-contrib-python
$ pip3 install numpy
$ pip3 install matplotlib
:::info
Numpy 是用於數值矩陣等功能上的處理。
Matplotlib 是用於展示來自視頻或圖像的可選選項。
:::
檢查是否安裝成功
---
```python=
import cv2
print(cv2.__version__)
```
輸出結果:4.1.2 (目前測得環境中所安裝的版本)
:::warning
為什麼版本是 4.x.x, 卻 import 的是 cv2 ??
原因是 OpenCV 的 cv, cv2 指的不是的版本, 而是辨別開發語言是C還是 C++ 所開發的API的版本。 cv 是用C語言開發的,而cv2則是用 C++ 寫的,所以 cv2 指的就是 C++ 的版本。
:::
:::success
因於新版都是以 cv2 開頭, 故即使引用的是 cv, 通常我的寫法也會是
==import cv as cv2==
:::
一些圖像處理的小技巧
---
* 去雜點 (先腐蝕縮減 Erosion, 清除雜點, 再擴張膨脹 Dilation 成原來尺寸)

* 補小洞 (先擴張膨脹 Dilation, 填滿小洞, 再腐蝕縮減 Erosion 成原來尺寸)

一些問題的排除方式
---
* 在 macOS 執行 imshow 後卻看不到展示視窗 (未置頂, 隱藏在編輯器之後)
:::success
須在 imshow 之前, 加上以下 2 行指令
```
cv.namedWindow('視窗名稱', cv.WINDOW_NORMAL)
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "python" to true' ''') # for Mac, to make window active on Top
```
:::
* 看到展示視窗, 卻又關不掉
:::success
須在 imshow 之後, 加上 waitKey(毫秒數) & 0xFF # 等待時間(毫秒),若設定為 0 就表示持續等待至使用者按下任一按鍵為止, 按下後回傳 ASCII 碼。 對於 64位元機器, 須加上 & 0xFF
:::
* AttributeError: module 'cv2.cv2' has no attribute
:::success
pip3 install opencv-contrib-python
:::
若仍無法解決, 則可能是不相容 or 不支援, 可將 opencv-python 先 uninstall 再安裝舊版本。
---
:::success
#### 如果覺得此文對您有幫助, 也願意鼓勵勇哥的繼續創作, 點此 [加油一下](https://www.buymeacoffee.com/yungger) 😘 😘 !!
:::