Python配置opencv

原理

Python调用opencv的原理是:opencv编译出共享库文件,python把这个共享库文件作为一个模块加载并使用。

通俗点就是,编译opencv的时候开启python接口选项,编译好了会产生cv2.so(linux下)或者cv2.pyd(windows下)这个共享库文件,python代码中import这个cv2就可以用了。为了能正确import它,往往需要把cv2.so放在python找包能找到的路径下,或者修改PYTHONPATH环境变量让它包含cv2.so所在路径。此外,python的opencv接口中,图像使用numpy数组表示的,所以往往还需要安装numpy、scipy、matplotlib这几个包。

安装

包括python和cv2.so/cv2.pyd两方便的安装

python

windows

windows下请用anaconda,包含了numpy等各种常见python包,非常好用。

你当然可以不用anaconda,这看起来很纯粹,然而坑不少。numpy等包通过pip下载安装的话需要额外的编译器(天知道为啥它是用vs2008编译的,现在都2017了喂!)

如果执意要安装,那么需要vc的编译器,下载:http://www.microsoft.com/en-us/download/details.aspx?id=44266

然后pip install numpy和scipy,以及matplotlib即可。

linux

linux下我也试着用过anaconda,但是觉得不合适的地方在于,平时各种开源软件在配置PYTHONPATH等变量的时候,会比较晕,还是用apt-get装的python更熟悉更容易掌控些。而且python包的编译不会像windows那么麻烦,直接pip就可以了。

sudo pip install numpy scipy matplotlib

cv2.so/cv2.pyd

windows

如果只是很简单的使用一下opencv中最常见的功能,那么不用自己编译!去官网下载windows版opencv,自带编译好的库文件和可执行文件,找到cv2.pyd,放到site-packages路径下就可以了

如果使用了有专利保护的或者其他一些第三方功能,那么很可能需要把opencv和opencv_contrib两个项目一起编译。这样产生的cv2.pyd才是可用的。

记得把cv2.pyd放到路径中。

linux

包管理工具默认是提供opencv的库文件的。比如apt或者yum、dnf去下载即可。

同样,如果是复杂功能、有专利保护功能,就需要手动编译。然后cv2.so放到路径中。

懒人方式

在需要用cv2模块的代码目录中,把cv2.so拷贝过去。因为import包的时候会在当前路径下找包的!


以下是原文

python调用opencv,是让python调用opencv的DLL文件cv2.pyd。不过直接从官网下载的opencv3.0rc1压缩包中python的cv2.pyd文件,使用起来还是有问题,SIFT,SURF等函数不能使用。

解决方法是安装一个非官方的wheel包,到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/

然后用pip安装这个opencv的wheel包。

opencv版本的选取

2015年7月10日 10:34:11

现在opencv3.0rc1已经出来了,3.0代码中的python例程,要用3.0压缩包中带的cv2.pyd

而前面提到的SIFT、SURF函数无法调用,采用“安装一个非官方的wheel”包,目前下载到的是opencv-2.4.11版本的,装好它之后,opencv-3.0rc1里面的python例程中,houghcircles.py等代码跑不起来。毕竟版本不一样,有区别。

而我同时希望在eclipse+pydev的环境下写写SIFT、SURF的调用代码,这就需要继续配置:配置系统变量PYTHONPATH,它指明了命令行下python调用的DLL路径。比如我的:

%Python%\Lib;%Python%\DLLs;%Python%\Lib\lib-tk;%Python%\my_dlls;

其中,my_dlls是我新建的目录,把opencv-3.0rc1提供的cv2.pyd放到此目录下。

这样,双击opencv-3.0rc1中的python代码,就能运行了。

而在eclipse中,对python interpreter的autoconfig,默认情况下不会添加my_dlls目录,就可以放心使用SIFT、SURF了。当然如果这时候需要在eclipse中运行opencv-3.0rc1的python例程代码,就需要添加my_dlls路径;在终端下运行调用SIFT、SURF函数的代码,就需要把PYTHONPATH中的my_dlls目录去除。没办法,python+opencv还不够成熟,只好用这种土鳖方法了。

Python使用opencv的更多相关文章

  1. 用 Python 和 OpenCV 检测图片上的条形码

      用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...

  2. 在windows 8.1 64位配置python和opencv

    之前在linux下安装python和opencv及相关的库,都可以直接命令行操作.最近需要在windows下配置一下,查了一些资料,发现网上有很多关于python和opencv的配置,但由于不同版本问 ...

  3. 针对于Python的OpenCV环境搭建

    OpenCV 依赖 下载OpenCV 配置 总结 给Python搭建opencv的环境还真是略嫌麻烦,于是做下笔记,以备不时之需. OpenCV 依赖 opencv有些依赖,我们必须安装一下,否则接下 ...

  4. Ubuntu 16.04 python和OpenCV安装

    Ubuntu 16.04 python和OpenCV安装:最进在做深度学习和计算机视觉的有关内容,因此要在python中用到opencv.我的电脑装的是Ubuntu 16.04,python 2.7和 ...

  5. Python cv2 OpenCV 中传统图片格式与 base64 转换

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法.通过http传输图片常常将图片数据转换成base64之后再进行传输. Base64简 ...

  6. 识别简单的答题卡(Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV——jsxyhelu重新整编)

    该博客转自www.pyimagesearch.com,进行了相关修改补充. Over the past few months I've gotten quite the number of reque ...

  7. 用 Python 和 OpenCV 检测图片上的条形码(转载)

    原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...

  8. BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路

    BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...

  9. Python下opencv使用笔记(一)(图像简单读取、显示与储存)

    写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...

随机推荐

  1. The meterprter basic commonds

    Using Meterpeter commands Since the Meterpreter provides awhole new environment, we will cover some ...

  2. Linux内核分析第三周——构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  3. mysql互为主从复制配置笔记--未读,稍后学习

    MySQL-master1:192.168.72.128 MySQL-master2:192.168.72.129 OS版本:CentOS 5.4MySQL版本:5.5.9(主从复制的master和s ...

  4. smarty调用php函数

    模板书写: {'param1'|functionName:'param2':'param3'} php函数原型: echo functionName('param1','param2','param3 ...

  5. 《剑指offer》— JavaScript(13)调整数组顺序使奇数位于偶数前面

    调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的 ...

  6. 学习笔记:使用opencv做双目测距(相机标定+立体匹配+测距).

    最近在做双目测距,觉得有必要记录点东西,所以我的第一篇博客就这么诞生啦~ 双目测距属于立体视觉这一块,我觉得应该有很多人踩过这个坑了,但网上的资料依旧是云里雾里的,要么是理论讲一大堆,最后发现还不知道 ...

  7. [linux]linuxI/O测试的方法之dd

    参考http://www.thomas-krenn.com/en/wiki/Linux_I/O_Performance_Tests_using_dd Measuring Write Performan ...

  8. html5的web存储详解

    以前我们在本地存储数据都是用document.cookie来存储的,但是由于其的存储大小只有4K左右,解析也很复杂,给开发带来了诸多的不便.不过现在html5出了web的存储,弥补了cookie的不足 ...

  9. 您是哪个等级的CSS开发人员?

    我们在不断的学习,追求进步与提高,到底学到什么程度了,到底是 不是真的了解CSS,是哪个层次了呢.我们来对照一下. 第0级:CSS?那不是一个多人射击游戏吗?  CSS? Isn't that a m ...

  10. asp.net中模拟测试smtp发邮件

    最近在编程人生里要测试一个会员邮件的功能,就写了下面的代码. 在asp.net 中,有时要测试发信SMTP,但如果在单元测试中,如果没方便好用的 smtp怎么办,其实还是有办法模拟的,下面讲解下: 在 ...