配置运行环境
这里只说opencv的python库。从http://opencv.org可以下最新的opencv库。下好一个exe文件后一路下一步即可。安装完成后,找到安装目录下\build\python\2.7\x86\cv2.pyd,将其copy至python安装目录下Python27\Lib\site-packages中。由于本人比较懒,numpy的安装我是直接通过Pycharm进行安装的,大家也可以通过numpy的官网进行安装。这两个库都装好后在python程序中输入:
import cv2
import numpy as np
运行后不报错即为配置成功。若报错,检查以下几点:
- 使用与OpenCV库要求的相同版本的Python编译器,此处为2.7
- 使用与Python相同位的OpenCV库文件,此处为x86
尤其是第二步,没处理好的话会报“cv2.pyd非有效的win32动态链接库”错误。
如果还不行,那么只能:重装你所有于此相关的程序,包括opencv库,python编译器,python IDE,且保证三者均为x86或x64(一般来说就算是64位处理器,装32位也是可行的且出现问题的概率较低)。
第一个OpenCV程序
# !/usr/bin/env python2.7
# _*_ coding:utf-8 _*_
import cv2
import numpy as np
path = r'D:\OpenCV\sources\samples\data\lena.jpg'
# Read an image. Second argument mean: 1->cv2.IMREAD_COLOR 0->cv2.IMREAD_GRAYSCALE -1->cv2.IMREAD_UNCHANGED
img = cv2.imread(path, 1)
cv2.imshow('Hello Lena', img)
# 64-bit machine have to add "& 0xFF" to "cv2.waitKey(0)"
k = cv2.waitKey(0) & 0xFF
# press key 's' to save
if k == ord('s'):
# Save image, First argument is the file name, second argument is the image you want to save.
cv2.imwrite('test.jpg', img)
cv2.destroyAllWindows()
小程序没啥用,主要就是看看自己的OpenCV配置好了没。。运行后会显示CV的大名鼎鼎的美女Lena,如果按下s键则将该图片保存至项目目录下取名为test.jpg中,按其他键则直接退出。
主要用到几个函数:
cv2.imread()
该方法用来读取图像。两个参数,第一个指定图像路径,第二个取1,0,-1,分别代表读入的图像为cv2.IMREAD_COLOR、cv2.IMREAD_GRAYSCALE或IMREAD_UNCHANGED模式。三者区别如下:- cv2.IMREAD_COLOR : Loads a color image. Any transparency of image will be neglected. It is the default flag.
- cv2.IMREAD_GRAYSCALE : Loads image in grayscale mode
- cv2.IMREAD_UNCHANGED : Loads image as such including alpha channel
cv2.imshow()
该方法会新建一个窗口用以显示指定图片,窗口大小会自动匹配为图片大小并且是固定的。两个参数,第一个指定生成window的title,第二个指定要显示哪张图片。另外若在这句前调用cv2.namedWindow(‘title name’, cv2.WINDOW_NORMAL)则会生成可调整大小的window。实际上默认情况下是相当于调用了cv2.namedWindow(‘title name’, cv2.WINDOW_AUTOSIZE)。cv2.waitKey()
这是一个键盘绑定方法。传入一个毫秒数,如果在该事件按任意键程序将会继续执行,如果传入0则程序会被阻塞等待键盘事件。该方法的返回值可以用来检测是否按下了特定键。另外需要注意的是若是64位处理器,则应在该方法后加上“& 0xFF”。cv2.imwrite()
该方法会将指定图片保存至指定目录。传入的两个参数一个指定路径及生成的文件名,另一个指定要保存的图片。cv2.destroyAllWindows()
该方法会销毁所有opencv生成的window。若要销毁某一指定window,则使用cv2.destroyWindow()方法。