Python使用opencv
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的更多相关文章
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- 在windows 8.1 64位配置python和opencv
之前在linux下安装python和opencv及相关的库,都可以直接命令行操作.最近需要在windows下配置一下,查了一些资料,发现网上有很多关于python和opencv的配置,但由于不同版本问 ...
- 针对于Python的OpenCV环境搭建
OpenCV 依赖 下载OpenCV 配置 总结 给Python搭建opencv的环境还真是略嫌麻烦,于是做下笔记,以备不时之需. OpenCV 依赖 opencv有些依赖,我们必须安装一下,否则接下 ...
- Ubuntu 16.04 python和OpenCV安装
Ubuntu 16.04 python和OpenCV安装:最进在做深度学习和计算机视觉的有关内容,因此要在python中用到opencv.我的电脑装的是Ubuntu 16.04,python 2.7和 ...
- Python cv2 OpenCV 中传统图片格式与 base64 转换
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法.通过http传输图片常常将图片数据转换成base64之后再进行传输. Base64简 ...
- 识别简单的答题卡(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 ...
- 用 Python 和 OpenCV 检测图片上的条形码(转载)
原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...
- BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路
BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...
- Python下opencv使用笔记(一)(图像简单读取、显示与储存)
写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...
随机推荐
- smarty调用php函数
模板书写: {'param1'|functionName:'param2':'param3'} php函数原型: echo functionName('param1','param2','param3 ...
- 解题:POI 2013 Taxis
题面 设当前位置为$pos$,那么可以发现在出租车总部左侧时,每辆车的贡献是$x[i]-(d-pos)$,而在右侧时只有$x[i]>=m-d$的车能够把人送到,那么首先我们要找出最小的满足$x[ ...
- CSS中background样式的repeat和no-repeat
自http://blog.sina.com.cn/s/blog_98eef7830101cv8t.html获取的知识,特此感谢. <!DOCTYPE html> <html lang ...
- 玲珑杯”ACM比赛 Round #19 B 维护单调栈
1149 - Buildings Time Limit:2s Memory Limit:128MByte Submissions:588Solved:151 DESCRIPTION There are ...
- maven使用ss代理
把maven安装目录下的conf/settings.xml复制一份到~/.m2/下 在<proxies>标签中添加 <proxy> <id>socks5</i ...
- selenium利用Excel进行参数化(简单示例)
上篇搭建好环境后,正真开始我的自动化之旅了.... 开始之前特别说明一下testNG的版本,不能直接使用Eclipse直接线上下载的版本,线上版本太高,不能兼容,运行程序会报以下错误,需要自行下载低一 ...
- vijos 1243 生产产品 DP + 单调队列优化
LINK 题意:有1个产品,m个步骤编号为1~m.步骤要在n个机器人的手中生产完成.其中,第i个步骤在第j个机器人手中的生产时间给定为$T[i][j]$,切换机器人消耗cost.步骤必须按顺序,同一个 ...
- 【CodeForces】578 C. Weakness and Poorness
[题目]C. Weakness and Poorness [题意]给定含n个整数的序列ai,定义新序列为ai-x,要使新序列的最大子段和绝对值最小,求实数x.n<=2*10^5. [算法]二分| ...
- Razor使用Parse()时最好指定“缓存名”
为什么? 本文的标题,明显有一种提醒的口吻. 从18年的生活经验看,如果想提醒人要怎么办,不要怎么办. 最好说明原因.那么小编开始说明原因喽. 哦对,说原因之前,先说交代一下背景,一句话 在非mvc下 ...
- session_write_close()的作用
简单地说,当开启session_start以后,这个session会一直开启,并且被一个用户使用.其他用户开启session的话要等待第一个session用户关闭以后才可以开启sessio,这样就造成 ...