linux/ubuntu下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)
希望这篇文章能彻底帮你解决python opencv安装和使用中的常见问题.
懒人请直奔这一节, 一条命令安装 opencv
使用python-opencv常用的问题
在linux中使用python版的opencv相信大家都会遇到各种问题, 常见的问题比如:
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'一些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使用问题)的更多相关文章
- Linux(Ubuntu)下MySQL的安装与配置
转自:http://www.2cto.com/database/201401/273423.html 在Linux下MySQL的安装,我一直觉得挺麻烦的,因为之前安装时就是由于复杂的配置导致有点晕.今 ...
- 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
最新教程:http://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环 ...
- lampp 在linux ubuntu下自动开机启动
lampp 在linux ubuntu下自动开机启动 lampp在linux下是不会自动启动的.需要手工处理.如下: 假如,你的lampp安装在 /opt/lampp 目录下,那么可以如下处理: 1. ...
- Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案
Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案 环境: Ubuntu 14.04 LTS 解决方案是 ibus-Rime 输入法, 再加上搭配自然码的配置表 (1) ibus 首先安装 ...
- 开源播放器 ijkplayer (五) :Linux/Ubuntu 下编译ijkplayer
一.安装Git与yasm sudo apt-get install git sudo apt-get install yasm 二.下载和配置 SDK.NDK SDK一般开发时肯定都有的,NDK一般是 ...
- ubuntu下Chrome谷歌浏览器部分网站图片显示不正常的解决方法
title: ubuntu下Chrome谷歌浏览器部分网站图片显示不正常的解决方法 toc: false date: 2018-09-02 14:37:26 categories: methods t ...
- Ubuntu环境下非root用户指定版本Python的安装及虚拟环境virtualenv的使用
Ubuntu环境下非root用户指定版本Python的安装及虚拟环境virtualenv的使用 参考博客: https://blog.csdn.net/leviopku/article/details ...
- 转载:ubuntu 下添加简单的开机自启动脚本
转自:https://www.cnblogs.com/downey-blog/p/10473939.html linux下添加简单的开机自启动脚本 在linux的使用过程中,我们经常会碰到需要将某个自 ...
- linux(ubuntu)下安装phantomjs
1.安装phantomjs ubuntu下sudo apt-get install phantomjs下载的不能用 —-下载程序文件 到官网下载 1.安装phantomjs —-下载程序文件 wget ...
随机推荐
- 2-SAT问题学习笔记+例题[洛谷P4792]
一个不错的2-SAT文章:传送门 问题初入 什么是2-SAT SAT是适定性(Satisfiability)问题的简称 .一般形式为k-适定性问题,简称 k-SAT. 首先,把「2」和「SAT」拆开. ...
- Windows下计划任务的使用
0x01 前言 在渗透测试中,尤其是域渗透,常常会用到Windows系统的计划任务,一是用于远程启动程序,二是用于程序的自启动 那么,计划任务具体有哪些使用技巧呢?是否对权限有要求?一定需要管理员权限 ...
- XSS中的同源策略和跨域问题
转自 https://www.cnblogs.com/chaoyuehedy/p/5556557.html 1 同源策略 所谓同源策略,指的是浏览器对不同源的脚本或者文本的访问方式进行的限制.比如源a ...
- 浏览器渗透框架BeEF使用笔记(一)
0x00 前言 BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具. 用Ruby语言开发的,Kali中默认安装的一个模块,用于实现对XS ...
- NodeJS操作MongoDB数据库
一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...
- 收益 or 挑战?Serverless 究竟给前端带来了什么
作者 | 黄子毅(紫益) 阿里前端技术专家 导读:前端开发者是最早享受到 "Serverless" 好处的群体,因为浏览器就是一个开箱即用.甚至无需为计算付费的环境!Serverl ...
- openssl之aes对称加密
AES:密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 Rijndael加密法. 对称加密:用同一个密码 加密/解密 文件. 使用openssl中 ...
- 微信小程序之页面引用utils中的js文件
/* 只可使用相对路径 */const utils = require('../../../utils/util.js') Page({})
- instruments无法连接,设备查询不到,找不到工程,查询不到对应app
这种问题真是让人捉急,一定要沐浴更衣,怀着一颗虔诚的心. 1.拔掉设备(iPhone/iPad),关掉设备.(长按电源键) 2.关闭Xcode和Instruments 3.重启设备(iPhone/iP ...
- Mybaits 源码解析 (三)----- Mapper接口底层原理(为什么Mapper不用写实现类就能访问到数据库?)
上一篇我们讲解到mapperElement方法用来解析mapper,我们这篇文章具体来看看mapper.xml的解析过程 mappers配置方式 mappers 标签下有许多 mapper 标签,每一 ...