返回介绍

OpenCV-图像处理和计算机视觉

发布于 2025-02-25 22:46:22 字数 2749 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文