//
//  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;
}