Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 1001|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-9-4 11:47:58 | 显示全部楼层 |阅读模式

    希望这篇文章能彻底帮你解决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)
    

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

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 13:41 , Processed in 0.053107 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表