通常發生在先安裝opencv-contrib-python,
在接著安裝opencv-python
會發生報錯。
雖然先前也發生一樣的事情,但在換電腦後重新安裝時,也發生同樣的錯誤XD。

報錯訊息
AttributeError: module 'cv2.dnn_superres' has no attribute 'DnnSuperResImpl_create'以上情況通常與
OpenCV
和其額外模組的版本
不兼容或安裝不完整有關。opencv-contrib-python
是 OpenCV 的擴展版本,包含額外的功能模組(如面部識別、SIFT/SURF 等專有演算法),而 opencv-python
只包含核心模組。
可能的原因包括:
- 版本不匹配:如果你安裝了某個版本的
opencv-contrib-python
,然後又安裝了不同版本的opencv-python
,這兩者之間的版本不兼容會導致功能無法正常工作。重新安裝正確版本的opencv-contrib-python
後,會使 OpenCV 回到一個穩定的狀態。 - 不完整的安裝:在某些情況下,
opencv-contrib-python
安裝過程可能沒有成功完成,可能是因為網絡問題或依賴關係未正確解決。重新安裝可能會解決這些問題。 - 多次安裝衝突:如果你曾多次安裝或卸載不同版本的 OpenCV,有可能會殘留某些文件,導致模組之間的衝突。這時,重新安裝
opencv-contrib-python
能夠清除衝突並恢復正常。 - 環境問題:你可能有多個 Python 環境,且每個環境有不同版本的 OpenCV。在某個環境中安裝或運行時,版本的衝突可能會導致程式無法執行。重新安裝可確保在正確的環境下使用正確的模組。
除了 cv2.dnn_superres
模組,以下這些模組也可能會遇到類似的問題:
- cv2.face:這是 OpenCV 中的面部識別模組,如果你使用的
opencv-python
或opencv-contrib-python
版本不支持,它可能會顯示沒有該模組的錯誤。 - cv2.bgsegm:這是背景分割的模組,用於移動目標的檢測。它也是
opencv-contrib-python
中的一部分,版本不匹配時可能會遇到AttributeError
。 - cv2.text:這個模組包含了 OpenCV 中的文字檢測和識別算法,如 OCR。如果
opencv-contrib-python
安裝不完整,它也可能無法使用。 - cv2.aruco:這是用於處理
Aruco
標記的模組,也屬於opencv-contrib-python
,出錯的原因可能是版本或模組不匹配。 - cv2.xfeatures2d:這個模組包含一些進階的特徵檢測演算法(如 SIFT 和 SURF),這些演算法需要特定版本的
opencv-contrib-python
才能正確使用。
解決方法:
- 確認安裝版本:確保你安裝的是兼容版本的
opencv-contrib-python
,可以使用以下指令檢查版本:pip show opencv-python opencv-contrib-python
- 重新安裝 opencv-contrib-python:確保你的 OpenCV 安裝完整,尤其是需要使用擴展模組時,重新安裝
opencv-contrib-python
可能有助於解決問題:pip uninstall opencv-python opencv-contrib-python
pip install opencv-python
pip install opencv-contrib-python - 版本控制:嘗試指定特定的版本,例如:
pip install opencv-contrib-python==4.5.3.56
如果你確定使用正確的版本並且仍然遇到問題,請考慮升級或降級 OpenCV 的版本來解決兼容性問題。
檢查已安裝的 OpenCV 套件版本
你可以使用 pip show
指令來檢查已安裝的 OpenCV 相關套件版本:
這將會顯示以下類似的輸出:

這將會顯示以下類似的輸出:
Name: opencv-python
Version: 4.10.0.84
Summary: Wrapper package for OpenCV python bindings.
...
Name: opencv-contrib-python
Version: 4.10.0.84
Summary: Wrapper package for OpenCV python bindings with extra modules.
...
重點在於這兩個套件的版本號必須完全一致,比如上面的版本號都是 4.10.0.84
。如果 opencv-python
和 opencv-contrib-python
的版本不一致,可能會導致功能無法使用或出現錯誤。
最後整理完資料,發現其實只安裝opencv-contrib-python
就好了
這是因為:
opencv-python
包含的是 OpenCV 的核心功能,例如基本的圖像處理、影像操作等。opencv-contrib-python
包含了opencv-python
的所有核心功能 以及額外的擴展模組(contrib modules),這些擴展模組包括例如 SIFT、SURF、面部識別等功能,這些在opencv-python
中是沒有的。
因此,當你安裝了 opencv-contrib-python
時,它自帶所有的 OpenCV 核心功能和擴展模組,你不需要再單獨安裝 opencv-python
。如果你先安裝了 opencv-contrib-python
,但之後又安裝了 opencv-python
,後者可能會覆蓋前者的安裝,因為 opencv-python
會安裝較少的模組,而這樣可能會導致你原本需要的擴展功能無法使用。
為什麼只安裝 opencv-contrib-python
就夠了?
- 完整性:
opencv-contrib-python
包含了所有opencv-python
的核心模組功能,並且額外包含了來自contrib
的擴展模組。 - 避免衝突:如果你同時安裝了兩者,
opencv-python
可能會覆蓋掉opencv-contrib-python
中的某些擴展模組,從而導致你無法使用特定的功能,像你提到的cv2.dnn_superres
就屬於contrib
擴展模組。 - 維護方便:只安裝
opencv-contrib-python
可以避免版本不一致的問題,因為它已經包含了所有必要的模組。這樣可以減少維護和排除錯誤的麻煩。