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.mzph.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君近期利用茶余饭后的时间开发了一个小插件,可以…