OpenCV-图像处理和计算机视觉
OpenCV 是 Intel 公司开发的开源计算机视觉库。它用 C 语言高速地实现了许多图像处理和计算机视觉方面的通用算法,并且通过 SWIG 提供了 Python 的调用接口。本章介绍用 Python 调用 OpenCV 库,实现一些简单的图像处理和计算机视觉算法。
OpenCV 提供的 Python 调用接口和 C 语言的 API 基本上是一致的,这个接口对于动态语言 Python 来说有些累赘。不过由于 Python 程序和 C 语言程序差别不大,用 Python 调用 OpenCV,能够帮助我们测试 API 函数和快速实现算法。
读写图像和视频文件
让我们从显示一幅图像开始进入 OpenCV:
# -*- coding: utf-8 -*-
from opencv.highgui import *
import sys
img = cvLoadImage( sys.argv[1] )
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE)
cvShowImage("Example1", img)
cvWaitKey(0)
OpenCV 的库可以分为 5 个主要组成部分,下图显示了其中的 4 个:
OpenCV 的 5 个主要组成部分
- CV : 包括了基本的图像处理和高级的计算机视觉算法,在 Python 中,opencv.cv 模块与之对应
- ML : 机器学习库,包括许多统计分类器,opencv.ml 模块与之对应
- HighGUI : 提供各种图像、视频、数据的输入输出和简单的 GUI 开发,opencv.highgui 模块与之对应
- CXCore : 上述三个库都是以 CXCore 提供的基本数据结构和函数为基础,主模块 opencv 与之对应
- CvAux : 包括一些实验性的算法
显示图像的例子中,只用到数据输入和界面显示两个功能,他们都在 highgui 库中,因此需要从库中载入这些函数,由于 opencv 的所有 API 函数都以 cv 开头,因此不怕他们和别的库命名冲突:
from opencv.highgui import *
下面调用 cvLoadImage 从文件中读入图片信息,其返回的是一个 opencv.cv.cvMat 对象,cvMat 是 OpenCV 中描述矩阵(或者说多维数组) 的数据结构,许多图像处理操作都是针对 cvMat 对象进行的:
img = cvLoadImage( sys.argv[1] )
下面调用 cvNamedWindow 函数创建一个窗口,其名字为"Example1",大小设置为 CV_WINDOW_AUTOSIZE,表示它随着其内容自动改变大小:
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE)
然后调用 cvShowImage 函数,将 img 表示的图像显示在"Example1"窗口。由于 OpenCV 库大部分代码都是使用 C 语言编写的,因此它采用“对象.方法()”的方式,而是使用函数的方式。而且 highgui 提供的仅是简便的 GUI 功能,因此这里直接用字符串"Example1"表示要显示图片的窗口,而不是用某个表示窗口的对象。
最后调用 cvWaitKey,等待用户按键输入,如果其参数为正值,那么等待指定的毫秒数后继续运行;如果其值为 0,表示永久等待:
cvWaitKey(0)
如果在 IPython 中运行上面程序之后,IPython 等待用户按键输入,按任意键之后,IPython 进入可输入命令的状态,并且显示图片的窗口并没有关闭,这样就可以在 IPython 中直接输入 opencv 的函数调用,查看其结果。下面的先从 opencv.cv 载入所有图像处理相关的函数,
>>> from opencv.cv import *
然后调用 cvSmooth 函数对 img 进行高斯模糊,cvSmooth 函数的第一个参数指定原始图像,第二个参数指定输出图像,这里都用 img,因此高斯模糊的结果覆盖原始图像,第三个参数指定采用高斯模糊算法,第四个参数是高斯模糊的参数:以像素点为单位的模糊范围:
>>> cvSmooth(img, img, CV_GAUSSIAN, 11)
最后调用 cvShowImage 更新窗口中的图片:
>>> cvShowImage("Example1", img)
下面是图像处理的结果,左图为原始图像,右图为模糊后的图像:
调用 cvSmooth 对图像进行高斯模糊处理
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论