希望这篇文章能彻底帮你解决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. String的常见面试题

    下面代码,是我前些天在网上搜集的一小部分String的面试题.个人觉得感触很深,希望对大家有所帮助.不好的也请大家批评指正. package com.zys.string; public class ...

  2. cobalt strike批量发送钓鱼邮件

    0×01 利用Cobalt strike生成木马 这里我们生成木马可以用cs带的HTA.OFFICE宏.word宏来使目标上线cs,这里以word宏病毒为例子. 首先我们需要制作一个word宏病毒来进 ...

  3. 《FFT家族—从不会到崩溃(坑)》读blog笔记

    免责声明 原文地址https://blog.csdn.net/linjiayang2016/article/details/80341958,作者linjiayang2016.\text{linjia ...

  4. 浏览器安装Tampermonkey(俗称油猴子插件),实现免费观看Vip视频、免费下载付费资源等……

    应用场景 说起浏览器,本人常用google,谷歌浏览器,速度快,里面有很多插件,可以实现用户百度云盘下载限制,破解vip视频.百度广告屏蔽,视频广告的屏蔽,百度网盘资源直接下载等实用功能.今天就来分享 ...

  5. docker-compose 的使用

    1.安装docker-compose,参考官方教程:https://docs.docker.com/compose/install/ [chenjl@ipha-dev71- ~]$ sudo curl ...

  6. python编程系列---global的使用注意点

    global用法虽然很简单,当在函数中要修改全局变量时要使用到,但也要注意一个小问题,看下面的代码: 调用append()方法,只是修改,并不是赋值操作,不需要global提前声明 temp_num ...

  7. 7.Linux文件编辑之Vim

    1.VIM基本概述 1.什么是VIM? vi和vim是Linux下的一个文本编辑工具.(可以理解为windows的记事本,或word文档) 2.为什么要使用VIM? 因为Linux系统一切皆为文件,而 ...

  8. 用Docker搭建一个支持https的nginx代理服务

    用Docker搭建一个支持https的nginx代理服务 说明:本文所提的服务只是作者平常测试使用,可能含有未知bug或不成熟的解决方案,仅供参考,请不要用于正式环境,当然,使用过程中有任何问题欢迎提 ...

  9. RabbitMQ通过DLX实现消息延迟接收

    1. 创建队列WorkQueue,并把WorkQueue跟exchangeWork绑定:2. 创建队列DLXQueue,并把DLXQueue跟exchangeDLX绑定:a. 设置DLXQueue队列 ...

  10. Mybatis常见配置错误总结

    Mybatis常见配置错误总结 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionF ...