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

时间:2022-09-12 17:22:41

希望这篇文章能彻底帮你解决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 的结果如下:

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

# 然后就能看到装过的各种版本的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下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)的更多相关文章

  1. Linux&lpar;Ubuntu&rpar;下MySQL的安装与配置

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

  2. 在Linux&lpar;Ubuntu&rpar;下搭建ASP&period;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&lpar;Ubuntu&rpar; 下自然码加辅助码双拼输入的解决方案

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

  5. 开源播放器 ijkplayer &lpar;五&rpar; :Linux&sol;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&lpar;ubuntu&rpar;下安装phantomjs

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

随机推荐

  1. jquery&plus;bootstrap实现tab切换&comma; 每次切换时都请求数据&comma; 点击提交分别向不同的地址提交数据

    今天一个朋友叫帮做一个tab切换, 每一个tab内容区域都是从后台取出的数据, 这些数据要用表格的形式显示处理, 并且表格的内容区域可以修改, 如下所示: 例子查看请演示查看. 截图如图所示: 实现步 ...

  2. android 伸缩控件ExpandableListView 展开失败的可能原因。

    (原创)转载请声明出处http://www.cnblogs.com/linguanh/ 问题原型: ExpandableListView 展开失效. --------------------直接看结论 ...

  3. 解决&colon;NoSuchAlgorithmException&colon; Algorithm HmacSHA1 not available

    windows下运行macInstance = Mac.getInstance("HmacSHA1");完全正常,Linux下则出现异常: java.security.NoSuch ...

  4. JavaScript常用技巧总结(持续添加中&period;&period;&period;)

    在我学习过程中收集的一些常用技巧: typeof x !== undifined 判断x是否已定义: x === Object(x)  判断x是否为对象: Object.keys(x).length ...

  5. 【转】&dollar;&lbrace;sessionScope&period;user&rcub;的使用方法

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  6. ubuntu的dns设置

    ubuntu的dns设置为: dns-nameservers 8.8.8.8 注意不要少s

  7. 你的数据根本不够大,别老扯什么Hadoop了

    本文原名"Don't use Hadoop when your data isn't that big ",出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯 ...

  8. 让IE的Button自适应文字宽度兼容

    width:auto; overflow:visible; 这样将可以去掉IE按钮文字两边多余的空格,并按照自己设置的padding 来显示

  9. Unity 3D Framework Designing&lpar;1&rpar;—— MVVM 模式的设计和实施&lpar;Part 2&rpar;

    MVVM回顾 经过上一篇文章的介绍,相信你对 MVVM的设计思想有所了解.MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在.View只关心怎样渲染,而ViewModel只 ...

  10. html 标签学习&lpar;续&rpar;

    一.基础标签补充 1.div 标签和span标签 (没有特别的样式,常用) div标签用来定义一个块级元素,并无实际的意义.主要通过CSS样式为其赋予不同的表现. span标签用来定义内联(行内)元素 ...