现在正在学习 OPENCV,与大家分享一下使用OPENCV获取图像的心得。
首先给出源代码:
#include<highgui.h>
int main(int argc,char**argv)
{
IplImage* img=cvLoadImage("argv[1]");
cvNamedWindow("Example1");
cvShowImage("Example1",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1");
}
下面在一一详细解释:
IplImage* img=cvLoadImage("argv[1]");
该行的意思是将图像文件加载至内存(在实际代码中我们应该检查命令行参数argv[1]所指示的文件是否存在,若不存在应向用户发送一条错误信息)。cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载的格式;并且该函数将自动分配图像数据结构所需的内存。该函数执行完后返回一个指针,此指针指向一块为描叙该图像文件数据结构(IplImage)而分配的内存块。
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvNamedWindow()函数也是一个高层调用接口,该函数又highgui库提供,cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中,“Example1”为该窗口的标题,当然也可以使用其他名字,cvNamedWindow()函数的第二个参数定义了窗口的属性,该窗口可被设置为0(默认)或CV_WINDOW_AUTOSIZE,当为0时,窗口的大小不会不会因图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为CV_WINDOW_AUTOSIZE时,窗口这会根据图像的实际大小而相应的拉伸或缩放,以容纳图像。
cvShowImage("Example1",img);
该行的功能是显示图像,只要该行IplImage* img=cvLoadImage("argv[1]");在argv[1]中找到与img指针相应的图像,就可使用函数cvShowImage()显示图像,该函数第一个参数表示图像应该在标题为“Example1”的窗口显示,第二个参数表示应该显示那个指针指向的图像。
cvWaitKey(0);
cvWaitKey()函数的功能是使程序暂停,将该参数设置为0或负数是,程序将一直等待用户触发键操作。但如果将该参数设置为正数时,则程序将暂停一段时间,时间长为该整数的毫秒单位,例如设置为33,则表示等待时间为33毫秒(一秒显示三帧)。
cvReleaseImage(&img);
一旦用完加载到内存的图像文件,我们就可以释放为该图像文件所分配的内存,cvReleaseImage()函数执行完后,img指针被置为NULL。
cvDestroyWindow("Example1");
最后,可以销毁显示图像的窗口。事实上,当应用程序的窗口被关闭时,该应用程序窗口所占用的一切资源都将会被操作系统释放,所以地与一些简单的程序,不必调用cvReleaseImage()和cvDestroyWindow()这两个函数,但是,养成习惯每次调用函数显示释放资源总是好的。
小试牛刀:
#include"highgui.h"
int main(int argc,char*argv[])
{
IplImage* src =cvLoadImage("E:\beijing.jpg");
cvNamedWindow("win");
cvShowImage("win",src);
cvWaitKey(0);
cvReleaseImage(&src);
cvDestroyWindow("win");
return 0;
}
该函数的功能是显示一张图片(磁盘上的图片),图片就省略了,网速不给力。
刚开始学习OPENCV,可能有一些不到之处,望指正。