希望这篇文章能彻底帮你解决python opencv安装和使用中的常见问题.

懒人请直奔这一节, 一条命令安装 opencv

使用python-opencv常用的问题

在linux中使用python版的opencv相信大家都会遇到各种问题, 常见的问题比如:

  1. imshow 无法使用, 会出现如下警告. 这是因为python-opencv没有编译gtk, 网上的解决方法可能会推荐你重新编译什么的, 太过麻烦, 也不一定能解决.

    cv2.error: OpenCV(4.1.0) /io/opencv/modules/highgui/src/window.cpp:627: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

  2. 一些opencv的nonfree特性无法使用, 比方说 SIFT, SURF 等等, 以及一些较新的算法如CSRT没有实现.

最简单好用的python opencv安装

下面这个版本是带nonfree特性(sift, surf) ,contrib功能及一些较新的算法(CSRT跟踪器), 以及gtk编译imshow可正常使用的功能,推荐安装.

可能会用到conda, conda命令不熟悉的欢迎来我这篇文章查一下.

卸载全部其他python版本的opencv

如果你确定没有安装过python版的opencv, 那直接跳过这一步就好了.

# 首先看看系统上是否安装了opencv
# 如果你使用了 conda 环境, 用如下命令列出全部的opencv包
conda list opencv
# 注意: conda列出来的包, 每行末尾有pypi的要通过pip卸载, 没有pypi的通过conda卸载
# 如果没有conda, 那就用pip 看一下
pip list | grep opencv

conda list opencv 的结果如下:

# 然后就能看到装过的各种版本的opencv, 卸载这些opencv
# conda 卸载参考
conda uninstall xxx-opencv-xxx
# pip 卸载参考, 在我上面这张图中, 需要
pip uninstall opencv-contrib-python

安装opencv

注意其他的opencv一定要先卸载干净哦!

注意测试的环境为python3.6, 不保证其他python版本也有此版本的opencv

pip install opencv-contrib-python==3.4.2.16

这样就安装好啦, 很简单是吧, 其实最关键的问题就是找到这个特殊的版本.

opencv-contrib-python 是带contrib特性的opencv版本, 3.4.2.16这个版本(在google上大量搜索后找到的)是python opencv中满足上面这些需求的最后一个版本(截止到2019-10我测试过的). 欢迎大家多多测试其他的新版本, 有更新的版本欢迎在留言中请说明一下.

如果想通过conda安装, 只推荐conda -c menpo python3 不过只有3.1版本, 并且有功能缺失, 建议pip安装, 效果是一样的, 也可以安装进conda的虚拟环境中.

当然这种安装方式也是有缺点的, 那便是无法使用opencv4中的一些新特性, 但对大多数人来说, opencv3应该能满足绝大多数需求啦.

安装完测试一下

# 查看opencv版本
python -c "import cv2; print(cv2.__version__)"

如果出现 cv2._version__ 这个属性不存在的问题, 检查一些opencv是否完全卸载干净, 一定要全部卸载完, 再重新安装.

好了, 现在安装完毕, 来个简单的SIFT代码测试一下看看.

import cv2
print("opencv version:", cv2.__version__) # opencv version: 3.4.2 img1 = cv2.imread('1.png')
img2 = cv2.imread('2.png')
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# BFMatcher with default params
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
# cv2.drawMatchesKnn expects list of lists as matches.
result = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
cv2.imshow('result', result)
cv2.imwrite("result.jpg", result)
cv2.waitKey(0)

结果如下图



点此下载测试代码及图片.

好了, 这篇文章到此结束了.

linux/ubuntu下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)的更多相关文章

  1. Linux(Ubuntu)下MySQL的安装与配置

    转自:http://www.2cto.com/database/201401/273423.html 在Linux下MySQL的安装,我一直觉得挺麻烦的,因为之前安装时就是由于复杂的配置导致有点晕.今 ...

  2. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台

    最新教程:http://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环 ...

  3. lampp 在linux ubuntu下自动开机启动

    lampp 在linux ubuntu下自动开机启动 lampp在linux下是不会自动启动的.需要手工处理.如下: 假如,你的lampp安装在 /opt/lampp 目录下,那么可以如下处理: 1. ...

  4. Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案

    Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案 环境: Ubuntu 14.04 LTS 解决方案是 ibus-Rime 输入法, 再加上搭配自然码的配置表 (1) ibus 首先安装 ...

  5. 开源播放器 ijkplayer (五) :Linux/Ubuntu 下编译ijkplayer

    一.安装Git与yasm sudo apt-get install git sudo apt-get install yasm 二.下载和配置 SDK.NDK SDK一般开发时肯定都有的,NDK一般是 ...

  6. ubuntu下Chrome谷歌浏览器部分网站图片显示不正常的解决方法

    title: ubuntu下Chrome谷歌浏览器部分网站图片显示不正常的解决方法 toc: false date: 2018-09-02 14:37:26 categories: methods t ...

  7. Ubuntu环境下非root用户指定版本Python的安装及虚拟环境virtualenv的使用

    Ubuntu环境下非root用户指定版本Python的安装及虚拟环境virtualenv的使用 参考博客: https://blog.csdn.net/leviopku/article/details ...

  8. 转载:ubuntu 下添加简单的开机自启动脚本

    转自:https://www.cnblogs.com/downey-blog/p/10473939.html linux下添加简单的开机自启动脚本 在linux的使用过程中,我们经常会碰到需要将某个自 ...

  9. linux(ubuntu)下安装phantomjs

    1.安装phantomjs ubuntu下sudo apt-get install phantomjs下载的不能用 —-下载程序文件 到官网下载 1.安装phantomjs —-下载程序文件 wget ...

随机推荐

  1. [Luogu3932] 浮游大陆的68号岛

    题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg 浮游大陆的68号岛,位于浮游大陆的边境地带.平时很少有人造访. 岛上被浓厚的森林覆盖. ...

  2. redis内存数据的持久化方式

    转: http://blog.csdn.net/wzqzhq/article/details/64920996 概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis ...

  3. win10-搭建git工具

    .下载安装 git .生成 SSH 密钥 ssh-keygen -t rsa -C "email@com" -b 4096 .配置gitlab 增加 SSH 密钥. .配置 git ...

  4. mysql 二十余种报错注入姿势

    1.floor()  floor 和group by 搭配使用 利用group by 的key唯一性 和mysql 编码执行顺序导致二次执行产生不同key ))) ) 数值型注入时 不用闭合‘  进行 ...

  5. ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用

    1. 前言     现在,通常,为了让手机连上一个WiFi热点,基本上都是打开手机设置里面的WiFi设置功能,然后会看到里面有个WiFi热点列表,然后选择你要的连接上. 基本上你只要打开手机连接WiF ...

  6. jquery 往上滚动的时显示,上下滚动执行的js

    $(document).on("mousewheel DOMMouseScroll", function (e) { var delta = (e.originalEvent.wh ...

  7. vue,element列表大数据卡顿问题,vue列表渲染慢,element表格渲染慢,表格渲染慢(卡),表格全选卡

    https://github.com/livelyPeng/pl-table 一个表格组件(完美解决万级数据渲染卡顿问题),流畅渲染万级数据并不会影响到el-table的原有功能 分析: 前端UI框架 ...

  8. 09 python学习笔记-操作excel(九)

    python操作excel使用xlrd.xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的.这几个模块可以使用pip安装, ...

  9. python模块的导入详解

    一:一个小问题:什么是模块? 我的理解是:有通用功能的文件的集合. 二:为什么要使用模块? 我们通常为了使自己以前写的东西保存下来,会把东西写入文件中保存下来,必要时我们把这些文件当脚本去执行,也可以 ...

  10. vue-cli3安装jQuery

    注:vue-cli3.0 没有了 webpack.config.js 配置文件,取而代之的是集合在 vue.config.js文件 内进行配置 默认已经安装好vue-cli3.0项目 step1:命令 ...