python卸載opencv包_Ubuntu16.04卸載opencv2.4.9并安裝opencv3.2.0+contrib

本文為作者原創,轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負赑屃

需要用到opencv中的surf和sift算法,機器上只有opencv3.2,沒有擴展包,于是就去GitHub和官網看了下,沒想到8月剛出了3.3,一個激動就想裝個opencv3.3+contrib,不過opencv3.3+contrib這產生segment default(段錯誤,有可能是內存溢出)。完全不能用啊,可能是有些包沒下到,網上很難搜到3.3的相關模塊,如果對opencv3.3非常有興趣可以參考一下http://www.linuxfromscratch.org/blfs/view/svn/general/opencv.html。

0:寫在最前面

如果你只是想使用python驗證一下算法,那么恭喜你,后面不用看了。可以直接用pip獲取到帶contrib的opencv模塊,首先把你python中原有的opencv卸載掉,然后安裝帶有contrib的opencv模塊,如果沒有該包,請更換pip源,我使用的阿里源。你可以單獨為此次安裝指定源地址:

pip uninstall opencv-python

pipinstall opencv-contrib-python

pipinstall opencv-contrib-python -i https://mirrors.aliyun.com/pypi/simple

修正1:如果報錯:ImportError: DLL load failed: 找不到指定的模塊。

請在此https://www.lfd.uci.edu/~gohlke/pythonlibs/對應版本的opencv-python,我剛才在另一臺電腦測試,發現了這個錯誤,電腦的環境是Python3.6,64位系統,所以我下載了opencv_python-3.3.1-cp36-cp36m-win_amd64.whl,下載完成后進入文件所在目錄,執行:

pip install opencv_python-3.3.1-cp36-cp36m-win_amd64.whl

Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64bit (AMD64)] on win32

Type"help", "copyright", "credits" or "license" formore information.>>>import cv2>>> cv2.__version__

'3.3.1'

>>> exit()

分析,這個問題導致的原因是什么捏,python其實有很多模塊在安裝的時候都會產生這個錯誤,比如安裝mysql-Python的時候,這個錯誤的原因其實是因為pip安裝的模塊可能只是一個Python的擴展模塊,而缺少對應模塊的可執行程序(相關問題可以留言給我)。

修正2:安裝后報錯

>>> import cv2

Traceback (most recent call last):

File "", line 1, in

File "/usr/local/lib/python3.5/dist-packages/cv2/__init__.py", line 4, in

from .cv2 import *

ImportError: libSM.so.6: cannot open shared object file: No such file or directory

這是我在使用TensorFlow的docker中發現的錯誤,這個時候,不要使用某些博客推薦的安裝python-qt4的辦法,提供兩個解決方案:

###方案1:降低opencv版本,目前默認都是安裝opencv3.4,裝3.2即可

# pip install opencv-python==3.2.0.8

>>> import cv2

>>> cv2.__version__

'3.2.0'

###方案2:缺什么裝什么,國內更新apt比較慢,記得換掉源

# apt update && apt install -y libsm6 libxext6

###Python3.5下安裝:apt update && apt install -y libsm6 libxext6 libxrender1 libxext-dev

>>> import cv2

>>> cv2.__version__

'3.4.0'

注意,opencv-python只能在python中使用,并且,通過pip默認安裝的都是opencv3,如果需要安裝opencv2,并且想安裝完整的opencv sourcecode寫算法,繼續往下閱讀(opencv2和3的區別主要在于部分函數的調用,opencv2覆蓋的更全面一些,給出的api接口更多):

一、命令行查看已安裝的opencv版本

這個命令會經常用到。也可以用上面的cv2.__version__

pkg-config --modversion opencv

二、卸載

首先要找到當初安裝opencv sourcecode的build目錄(如果不明白什么是build目錄可以先跳過這一步,看第3步.),進入該build目錄執行如下操作:

sudo makeuninstall

cd ..sudo rm -r buildrm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*

刪除/usr中所有opencv相關項

cd /usr/

find . -name "*opencv*" | xargs sudo rm -rf

移除Python相關

apt-get remove opencv-doc opencv-data python-opencv

******如果找不到當初安裝的目錄,執行1,執行3,再執行2。******因為機器共享給小伙伴一起用的,我就沒找到2.4.9的安裝目錄,估計當時被刪了,所以我先下了一個249,build一遍后才uninstall的。

三、安裝

這里提供一個opencv3.2+contrib3.2的鏈接https://pan.baidu.com/s/1-A0I5jCnMwpRwcFpguGdqg。你也可以通過官網或者GitHub下載相應的版本,注意contrib模塊一定要下對應版本的release。

把opencv3.2和contrib模塊解壓縮,應該是兩個文件夾,建議放在同一個目錄下。由于cmake過程中,某些模塊下載速度很慢,容易導致build失敗,需要下載的ippicv+protobuf模塊我一并放在網盤內了,拿去不謝。

完成下載工作,進入opencv3.2:

mkdirbuild

cd build

cmake-D CMAKE_BUILD_TYPE=TELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local \-D INSTALL_C_EXAMPLE=OFF \-D INSTALL_PYTHON_EXAMPLE=ON \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \-D BUILD_EXAMPLES=ON ..

注意OPENCV_EXTRA_MODULES_PATH設置成自己的路徑。

看看是否報錯:

ICV:?Downloading?ippicv_linux_20151201.tgz...

CMake?Error?at?3rdparty/ippicv/downloader.cmake:73?(file):

如果提示缺少ippicv或者protobuf,則下載相應版本的放入錯誤提示的目錄內。

例如,提示缺少ippicv,新建文件夾opencv3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e,把ippicv文件放入該目錄,

再次執行cmake,確保沒有報錯。

執行make和make install命令

make

......

make install

打開opencv里面的sample,隨便選一個cpp,在里面增加一些例如sift、surf等nonfree算法試試吧。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533848.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533848.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php函數內的循環,PHP 循環列出目錄內容的函數代碼

PHP 循環列出目錄內容的函數代碼復制代碼 代碼如下:function list_files($dir){if(is_dir($dir)){if($handle opendir($dir)){while(($file readdir($handle)) ! false){if($file ! "." && $file ! ".." && $file ! "Thumbs.db&quo…

python火柴人打架代碼_python火柴人

廣告關閉 騰訊云11.11云上盛惠 ,精選熱門產品助力上云,云服務器首年88元起,買的越多返的越多,最高返5000元! 代碼實現了一個火柴人,他開心時可以跳躍、可以舞蹈,不開心時可以躺地上... ?代碼有…

spring boot admin 2.2 獲取日志失敗_SB實戰20-Spring Boot的日志和報告

上篇我們學習了《SB實戰19-Spring Boot的外部配置》,本篇我們學習Spring Boot的日志和報告。4 日志和報告4.1 日志日志是對應用運行時進行調試和分析的重要工具。Spring Boot使用SLF4J作為日志的API,Logback、Log4j2、Java Util Logging都可以作為日志提…

oracle樹狀排序,Oracle樹狀結構查詢

oracle用表的形式組織數據,某些數據還呈現樹狀結構,提供了對這些數據的組織、查詢等功能。在掃描樹結構表時,要依次訪問樹中的每一個節點,并且每個節點只能訪問一次,其步驟如下:1:從根節點開始2…

python numpy讀取數據_大神教你python 讀取文件并把矩陣轉成numpy的兩種方法

導讀 今天小編就為大家分享一篇python 讀取文件并把矩陣轉成numpy的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 在當前目錄下: 方法1: file open(‘filename) a file.read() b a.split(‘\n)#使用…

datagrid wpf 獲取選中_c# WPF DataGrid 獲取選中單元格信息

private void Button_Click(objectsender, RoutedEventArgs e){DataGridCell cell dg.GetCell(1, 2);TextBlock tb cell.Content asTextBlock;Console.WriteLine(tb.Text);}public static classDataGridExtension{/// ///獲取DataGrid控件單元格/// /// DataGrid控件/// 單元格…

redis哨兵高可用-源碼篇

前段時間寫過兩篇redis哨兵的文章,一篇是redis哨兵模式的搭建。另外一篇是redis哨兵主從切換的原理,。 當時寫的原理篇,是手動模擬主節點故障,然后查看主從切換的日志推算哨兵主從切換的流程。但是感覺這樣搞出來的流程太粗,忽略了很多細節,真正要搞明白…

python獲取網頁數據對電腦性能_【Python】網頁數據爬取實戰

由于網頁結構跟之前有變化,還不是很熟悉。代碼待完善,問題記錄:騰訊新聞二級網頁內容爬取有問題。鏈家網站頭文件沒有用到。爬取一條騰訊視頻的header內容,存入txt。要求:包含網頁鏈接包含title包含所有headers信息imp…

python集合去重_python集合去重

[python中對list去重的多種方法 怎么快速的對列表進行去重呢,去重之后原來的順序會不會改變呢? 1.以下的幾種情況結果是一樣的,去重之后順序會改變: i [1,2,3,3,4,2,3,4,5,6,1] news_i [] for id in i: if id not in news_i: news_i.append(…

linux進程pid分配規則,Linux進程pid分配法【轉】

一. 概述Android系統創建進程,最終的實現還是調用linux fork方法,對于linux系統每個進程都有唯一的 進程ID(值大于0),也有pid上限,默認為32768。 pid可重復利用,當進程被殺后會回收該pid,以供后續的進程pid…

sqlserver date類型和字符串比較_基于SQL Server數據庫搭建主從復制實現讀寫分離實戰演練...

一、課程介紹讀寫分離(主從同步)從字面意思就可以理解,就是把對數據庫的讀操作和寫操作分離開。讀寫分離在網站發展初期可以一定程度上緩解讀寫并發時產生鎖的問題,將讀寫壓力分擔到多臺服務器上。讀寫分離的基本原理是讓主數據庫處理事務性增、改、刪操…

linux非標準頭文件,Linux學習:unix的標準化的實現(Linux中各種限制-數據類型-各種標準化頭文件介紹)...

作為Linux的前身,unix標準化是十分重要的。我在這里挑幾個重要的點說明。1:Linux中各種限制。Linux中限制有編譯時限制和運行時限制,另外有一些限制是由于我們的實現不同而不同,因此我們需要調用對應的函數獲取對應的值不同。(eg&…

python怎么導入大小字母_python遍歷小寫英文字母的方法

python遍歷小寫英文字母的方法在c、c等語言中,可以用字符1的for循環來遍歷小寫的26個英文字母,但是由于python語言的特殊性,通過a 1這種代碼并不能成功遍歷,以下是在python中遍歷英文字母的簡潔代碼:import stringfor…

51單片機怎么顯示當前時間_(進階篇)51單片機之按鍵控制蜂鳴器、數碼管、按鍵值移位顯示...

一、實操演示- 按鍵控制蜂鳴器1、圖文詳細獨立按鍵硬件電路蜂鳴器硬件電路2、連接方式:J20的第3號引腳連接到J7引腳,即P15連接J7。J29的第7、8號引腳連接到JP1的第1、2號引腳,即P31連接k1,P30連接k2。下載程序后,觀察現…

linux怎么運行g77,Linux安裝g77編譯器的技巧

在Ubuntu10.10系統中,g77已經被gfortran完全替代了,但并不能完全兼容過去的g77,這樣就不能使用一些用977編譯的程序了。所以我們只能自己再安裝g77了。今天華軍小編給大家展示的是Linux安裝g77編譯器的技巧,精心挑選的內容希望大家…

oracle 結果集已耗盡_java.sql.SQLException: 結果集已耗盡

編寫了jsp誰能幫忙看下有什么問題編寫了jsp 誰能幫忙看下 有什么問題技術交流ResultSet rsnull;String str"select publish_id,publish_name,publish_time,publish_text from comment_tb order by publish_time desc ";query.connect();rsquery.select(str);while(rs…

vs使用未初始化的內存怎么解決_遇到C語言內存錯誤怎么辦?一定要找準這六個原因...

一、沒有為指針分配內存定義了指針變量,但是沒有為指針分配內存,即指針沒有指向一塊合法的內存。淺顯的例子就不舉了,這里舉幾個比較隱蔽的例子。1、結構體成員指針未初始化struct student { char *name; int score; }stu,*pstu; int main() …

linux服務器如何設置雙網卡,linux服務器設置(雙網卡共享上網)

一、網絡拓補結構:服務器:兩網卡的設置:eth0:202.96.168.100 掩碼:255.255.255.0 網關:202.96.168.68 #與 Inte.Net 相聯eth1:192.168.1.1掩碼:255.255.255.0#與局域網相聯客戶機子網段:192.1…

pwn環境搭建_pwndbg、pwntools環境搭建(Unix系統)

目錄[TOC]pwndbg環境搭建項目地址https://github.com/pwndbg/pwndbg搭建過程1、安裝環境基礎gitpythonpython-pip2、安裝過程使用git命令克隆遠程項目到本地。git clone https://github.com/pwndbg/pwndbg進入項目根目錄并執行一鍵安裝腳本cd pwndbg && ./setup.sh該腳…

cad求和插件_黑科技 | 無BIM建模下平面CAD自動生成門窗表

如果你接到的施工圖既不是用天正出的,也不是用revit出的,還得統計門窗表,那么你需要讀完這篇文章。為了能夠讓自己和所有底層同行們從這項無腦又燒腦的機械勞動中解脫,C君近期利用茶余飯后的時間開發了一個小插件,可以…