[OpenCV][Python]使用opencv-contrib-python報錯紀錄

更新於 2024/10/05閱讀時間約 8 分鐘

通常發生在先安裝opencv-contrib-python,在接著安裝opencv-python會發生報錯。

雖然先前也發生一樣的事情,但在換電腦後重新安裝時,也發生同樣的錯誤XD。

raw-image

報錯訊息

AttributeError: module 'cv2.dnn_superres' has no attribute 'DnnSuperResImpl_create'

以上情況通常與 OpenCV 和其額外模組的版本不兼容或安裝不完整有關。

opencv-contrib-python 是 OpenCV 的擴展版本,包含額外的功能模組(如面部識別、SIFT/SURF 等專有演算法),而 opencv-python 只包含核心模組。


可能的原因包括:

  1. 版本不匹配:如果你安裝了某個版本的 opencv-contrib-python,然後又安裝了不同版本的 opencv-python,這兩者之間的版本不兼容會導致功能無法正常工作。重新安裝正確版本的 opencv-contrib-python 後,會使 OpenCV 回到一個穩定的狀態。
  2. 不完整的安裝:在某些情況下,opencv-contrib-python 安裝過程可能沒有成功完成,可能是因為網絡問題或依賴關係未正確解決。重新安裝可能會解決這些問題。
  3. 多次安裝衝突:如果你曾多次安裝或卸載不同版本的 OpenCV,有可能會殘留某些文件,導致模組之間的衝突。這時,重新安裝 opencv-contrib-python 能夠清除衝突並恢復正常。
  4. 環境問題:你可能有多個 Python 環境,且每個環境有不同版本的 OpenCV。在某個環境中安裝或運行時,版本的衝突可能會導致程式無法執行。重新安裝可確保在正確的環境下使用正確的模組。

除了 cv2.dnn_superres 模組,以下這些模組也可能會遇到類似的問題:

  1. cv2.face:這是 OpenCV 中的面部識別模組,如果你使用的 opencv-pythonopencv-contrib-python 版本不支持,它可能會顯示沒有該模組的錯誤。
  2. cv2.bgsegm:這是背景分割的模組,用於移動目標的檢測。它也是 opencv-contrib-python 中的一部分,版本不匹配時可能會遇到 AttributeError
  3. cv2.text:這個模組包含了 OpenCV 中的文字檢測和識別算法,如 OCR。如果 opencv-contrib-python 安裝不完整,它也可能無法使用。
  4. cv2.aruco:這是用於處理 Aruco 標記的模組,也屬於 opencv-contrib-python,出錯的原因可能是版本或模組不匹配。
  5. 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 相關套件版本:

這將會顯示以下類似的輸出:

raw-image

這將會顯示以下類似的輸出:

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-pythonopencv-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 就夠了?

  1. 完整性opencv-contrib-python 包含了所有 opencv-python 的核心模組功能,並且額外包含了來自 contrib 的擴展模組。
  2. 避免衝突:如果你同時安裝了兩者,opencv-python 可能會覆蓋掉 opencv-contrib-python 中的某些擴展模組,從而導致你無法使用特定的功能,像你提到的 cv2.dnn_superres 就屬於 contrib 擴展模組。
  3. 維護方便:只安裝 opencv-contrib-python 可以避免版本不一致的問題,因為它已經包含了所有必要的模組。這樣可以減少維護和排除錯誤的麻煩。


參考文獻






avatar-img
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
在 Python 中,你可以使用 raise 關鍵字手動觸發錯誤。這對於測試異常處理或在特定情況下停止程式執行非常有用。 本文主說明在影像處理中常見的異常情況,展示如何使用 raise 來觸發不同類型的錯誤。 1. 檔案不存在 (FileNotFoundError) 在影像處理中,如果要讀取
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
使用cv2.imread讀取圖片時,如果路徑有包含到中文,就會報錯。 本文將提供另外一個方式cv2.imdecode,路徑有包含到中文時仍可以正常讀取圖片。 測試範例 import cv2 img = cv2.imread('D:/CRABpy/write/圖檔/chars_01.png'
在 Python 中,你可以使用 raise 關鍵字手動觸發錯誤。這對於測試異常處理或在特定情況下停止程式執行非常有用。 本文主說明在影像處理中常見的異常情況,展示如何使用 raise 來觸發不同類型的錯誤。 1. 檔案不存在 (FileNotFoundError) 在影像處理中,如果要讀取
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
使用cv2.imread讀取圖片時,如果路徑有包含到中文,就會報錯。 本文將提供另外一個方式cv2.imdecode,路徑有包含到中文時仍可以正常讀取圖片。 測試範例 import cv2 img = cv2.imread('D:/CRABpy/write/圖檔/chars_01.png'
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
我們在「【語音辨識引擎sherpa-onnx GPU下篇】讓您體驗更快的語音辨識功能」建置環境的過程中預到了這樣的錯誤訊息: RuntimeError: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc: 1209
Thumbnail
首先確定VS Code的版本,如果你的版本跟我一樣是1.92.0那麼你可以參考我的作法...
Thumbnail
👋 剛學OpenGL時就對這件事情感到相當疑惑,還沒開始寫程式,光是前置作業,就被各種函式庫搞得頭痛,為什麼不能像OpenCV一樣方便呢?後來才知道這跟OpenGL的本質有關;怕自己忘記故在此紀錄之。
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
gcc11.4卡住的機會很高(目前不大確定但更新12後可以安裝暫且認定市這個問題吧) 要開始底下步驟前先把gcc換到12 GCC ref: ​清除舊版本 sudo apt-get --purge remove "*nvidia*" "libxnvctrl*" 下載​NVIDIA-
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
Thumbnail
這篇文章將分享最近遇到 NVIDIA GPU driver 的問題,並提供瞭解決步驟,以及證實問題解決的測試方法。當您遇到類似問題時,可以參考這篇文章進行解決。文章中包含了定位庫文件目錄、備份和替換文件以及測試修改的步驟。
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
Thumbnail
這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務 start_server = websockets.serve(server, 'localhost', args.port) async with start_server:
Thumbnail
IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級..
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
我們在「【語音辨識引擎sherpa-onnx GPU下篇】讓您體驗更快的語音辨識功能」建置環境的過程中預到了這樣的錯誤訊息: RuntimeError: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc: 1209
Thumbnail
首先確定VS Code的版本,如果你的版本跟我一樣是1.92.0那麼你可以參考我的作法...
Thumbnail
👋 剛學OpenGL時就對這件事情感到相當疑惑,還沒開始寫程式,光是前置作業,就被各種函式庫搞得頭痛,為什麼不能像OpenCV一樣方便呢?後來才知道這跟OpenGL的本質有關;怕自己忘記故在此紀錄之。
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
gcc11.4卡住的機會很高(目前不大確定但更新12後可以安裝暫且認定市這個問題吧) 要開始底下步驟前先把gcc換到12 GCC ref: ​清除舊版本 sudo apt-get --purge remove "*nvidia*" "libxnvctrl*" 下載​NVIDIA-
Thumbnail
在讀取檔案時,最怕路徑的問題,常常會有路徑錯誤造成的異常報錯。 為了避免諸如此類的問題發生,明白程式的當前目錄與檔案的路徑是很重要的。 可以利用os 模組是 Python 中的一個標準庫,提供了許多與操作系統的功能。 以下是一些常用的 os 模組基本操作及其範例: 1. os.getcwd
Thumbnail
這篇文章將分享最近遇到 NVIDIA GPU driver 的問題,並提供瞭解決步驟,以及證實問題解決的測試方法。當您遇到類似問題時,可以參考這篇文章進行解決。文章中包含了定位庫文件目錄、備份和替換文件以及測試修改的步驟。
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
Thumbnail
這個問題發生在我們開發Python的Websocket Server時, 使用以下的程式碼架設服務 start_server = websockets.serve(server, 'localhost', args.port) async with start_server:
Thumbnail
IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級..