OpenCV程序设计介绍(1)

风在竹林 posted @ 2009年7月12日 09:45 in OpenCV with tags OpenCV介绍 , 3699 阅读

OpenCV(Open Source Computer Vision)
由Intel公司所开发出来的Open Source图像算法的函数库(Image Process Libary)可以制做图片,视频,矩阵运算,统计,图论,数据存储的相关C语言程序设计,相关的领域为:图像处理,机器视觉,图像识别,计算机图形学,信息检索或游戏设计,比较有名的示例为物体追踪,人脸辨识,傅立叶转换,纹理分析,可以整合不同图像文件格式的矩阵运算,应用在静态图片 (BMP,JPG,TIF,PNG),动态Webcam的影像处理.

OpenCV的组成为许多图像处理的数据结构及算法,因此需要一些基本的数据结构基础,比如说struct怎么使用,如何release数据结构的空间等基本操作,会使用到linked list的算少数,算是C语言中级程序设计,有兴趣玩的话,国内图像处理领域相关论文算法几乎都可以在OpenCV找的到,方便学术界用c语言推演更高级的图像处理处理算法,功能好比Matlab,但比Matlab快上许多倍,更可以整合c语言相关函数库,做更多元强大的功能应用,然而它最大的门槛是比 Matlab的进入障碍还高一些,运用到许多数据结构,指标运算,內存位址,学完OpenCV,相信程序设计的功力更可以技高一筹.

OpenCV 提供了简单的GUI接口,他无法像MicroSoft Visual C++的MFC及Borland C++builder的VCL那么完整,但如果是对于学术领域的研究是够用的,他也可以整合在Visual C++及C++ builder的环境上,而本人是以Dev - C++为主,属于最基本简单又不须付费的Complier.

接下来进入OpenCV最基础的入门,OpenCV最常用的函数库为"cv.h","highgui.h","cxcore.h"及"cvaux.h.h","cv.h"代表 Computer Vision,计算机视觉函数库,"highgui.h",当然就是GUI接口的函数库啦,当路径都配置好之后(第一篇安装方法),直接在开头 include进去就好啦,就跟stdio.h的使用方法一样

#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <cvaux.h>


接着,就介绍最基本的数据结构,IplImage,此数据结构是所有图像文件的一个中介,图像格式有很多种(bmp,jpg,png,tif),此数据结构的内容既不是bmp,也不是jpg,而是一个由cvLoadImage()所转换的自定义格式,如下所示:



读入图片之后,要怎么知道图片真的读入了呢,就利用"highgui.h"的功能来看看吧.

 

 

cvNamedWindow("Show Image",0);
cvResizeWindow("Show Image",300,400);
cvShowImage("Show Image",Image1);

 

要使用OpenCV的GUI时,要先给窗口名称命名,这算是比较好写的GUI之一了,里面"Show Image"就是这个窗口的名称,cvResizeWindow()就是调整窗口大小,窗口大小被配置在300*400,并指定窗口的名称,再来,就是显 示窗口的图片cvShowImage(),并且给予IplImage数据结构的结构变量,Image1里面必须要先用cvLoadImage()存入图像文件,接着,再用键盘事件cvWaitKey(0)来做等待延迟,一张图片就可以被打开啦,这是OpenCV最基本的操作之一,也像是c语言的"hello world"的开始,恭喜跨入第一步.

当数据结构被建立之后,当然要做释放的动作啦,在这边IplImage的数据结构被建立,窗口接口的数据结构也被建立,当执行完就要做回收的动作啦,所有的 数据结构都会被malloc()配置空间,而cvLoadImage()只是把一连串的动作隐藏起来,cvLoadImage()不但做了配置 IplImage的数据结构空间,也把所有扩展名格式的数据初始化,将所有的数值及一些简单的分析都存在IplImage的数据结构内,方便做一些图像算法的运算,而窗口接口被cvNamedWindow()给建立,窗口的数据结构被隐含在cvNamedWindow()中,使用者只要使用"Show Image"等命名操作就可以使用GUI窗口的控制,这是一种分层抽象的概念,比较复杂的部分被程序代码包在它的下一层,因此,我只要操控该窗口的字串名 称("Show Image")就可以做任何想要的动作了.

这边用cvDestroyWindow()及 cvReleaseImage()回收给系统,回收的东西是內存,一般来说,不做內存回收也不会影响电脑的效能太大,操作系統也会自动的做垃圾收集,把一 些没意义的內存做删除,因此程序代码不多这两行也不会有太大的影响,不过这种东西毕竟是占用內存的,也不能确定它是不是永久占用(电脑关机后一定消失),因 此,养成良好的习惯是程序设计师必备的,尤其是在设计一个大的应用程序的时候.

简单的OpenCV读取图像程序文件码

 

#include <stdio.h>
#include <cv.h>
#include <highgui.h>

int main()
{
    char FileName[10]="rain.jpg";

    IplImage *Image1 = cvLoadImage(FileName,1);

    cvNamedWindow("Show Image",0);

    cvResizeWindow("Show Image",300,400);

    cvShowImage("Show Image",Image1);

    cvWaitKey(0);

    cvDestroyWindow("Show Image");

    cvReleaseImage(&Image1);
}
 

 


图片:


执行结果:

 

Phoebe Piper 说:
2018年7月27日 12:44

<!--td {border: 1px solid #ccc;}br {mso-data-placement:same-cell;}--> Open source computer vision share is quite helpful for developers that provide guidance in development of perfect system. Online writers charge reasonable money to rush essays for submission for their valuable hirers.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter