接下来,我准备写一下我在学习OpenCV中得点点滴滴。当前我的操作系统环境为MacOS 10.9.1,IDE为Xcode 5.0.2。如果开发环境发生变化,我会在笔记的开头进行指出。所以,如果是在WIndows中进行开发的同学,注意一下头文件引用就行了。至少,目前我还只发现头文件的区别。
如何在Xcode中搭建OpenCV开发环境,参考我上一篇文章:在Xcode中搭建OpenCV开发环境。
准备把这个笔记写成一个系列,笔记结构也会相对来说比较统一。基本上都是开头一段描述性的话,然后直接上代码。要说的,都写在注释里面。这样,如果需要代码的拿去就能用了。并且,注释也不用怎么写了。我以前就一直拿别人的代码,粘贴到自己的项目中,可能过一段时间review的时候,真的就不知道有些代码什么意思了。我是这么想的,希望在快节奏的开发中,这点能为大家带来方便。
准备、复制、粘贴……
//
// main.cpp
// TestOpenCV
//
// Created by HuangYiwei on 14-2-9.
// Copyright (c) 2014年 HuangYiwei. All rights reserved.
//
#include "opencv2/highgui/highgui.hpp"
using namespace std;
int main(int argc, const char * argv[])
{
/*
IplImage:包含图片信息描述的一个数据结构,这也是在OpenCV中最常用到的一个数据结构。
cvLoadImage:高层调用接口,通过文件名确定文件格式,并自动分配内存空间。目前,支持的文件格式有:BMP、DIB、JPEG、JPE、PNG、PBM、PGM、PPM、SR、RAS和TIFF文件。该函数执行完成后,返回一个指针,指向一块为描述该图像文件的数据结构。第一个参数很明显是一个路径,第二个参数是载入图片的颜色模式,用的默认值,暂时还没搞清楚这个参数是干啥的。我猜可能是控制颜色空间或者深度之类的。
*/
IplImage* img = cvLoadImage("/Users/huangyiwei/Desktop/屏幕快照 2014-02-09 9.14.49.png", CV_LOAD_IMAGE_COLOR);
/*
cvNamedWindow:创建一个可以放置图像和trackbar的窗口。被创建的窗口可以通过它们的名字被引用。 如果已经存在这个名字的窗口,这个函数将不做任何事情。第一个参数是窗口名称,第二个参数是制定窗口大小如何控制,可以手动控制大小、全屏大小、自动大小等。我用的是自动大小,就是根据窗口里面的内容自动调节大小。
*/
cvNamedWindow("picture", CV_WINDOW_AUTOSIZE);
/*
cvShowImage:在指定的窗口中显示图片,第一个参数为窗口名称,第二个参数为包含图片描述信息的数据结构指针。
*/
cvShowImage("picture", img);
/*
cvWaitKey:不断刷新图像,此函数接受一个参数,作用为指定每幅图片之间的间隔时间。这个函数是HighGUI中唯一能够获取和操作事件的函数,所以在一般的事件处理中,它需要周期地被调用,除非HighGUI被用在某些能够处理事件的环境中。比如在MFC环境下,这个函数不起作用。如果程序想响应某个按键,可利用if(cvWaitKey(1)==Keyvalue),意思是1ms内如果有按键并且按键值等于Keyvalue。
*/
cvWaitKey(0);
/*
cvReleaseImage:释放刚才载入图像的内存空间(也即这个图像在内存中已经不存在了),同时img指针的值置为NULL。
*/
cvReleaseImage(&img);
/*
cvDestroyWindow:销毁一个窗口,并且释放该窗口所占用的所有内存。一共需要传递一个参数,用来指定需要销毁的窗口名称。
*/
cvDestroyWindow("picture");
return 0;
}