您的位置:首页 > 运维架构

【opencv学习笔记】显示图像

2015-07-28 10:57 543 查看
了解opencv已有一段时间,可一直没静下心来系统学,现在正赶上暑假,想把之前的学习做个总结,同时进行更深入的学习。我用的是VS2010+opecv2.48版本,之前装的时候遇到问题已经总结出来,现在opencv3.0已经出来有一段时间了,和2.0系列也有很大的改动,等有空再进行总结。今天主要来说说入门级的一个小程序——显示图像,同时对之前一些疑惑的细节问题进行说明。我们最先开始接触的是这样的一段程序:

#include "highgui.h"
int main(int argc,char**argv)
{
IplImage* img = cvLoadImage(argv[1]);
cvNamewindow("lean",CV_WINDOW_AUTOSIZE);     //CV_WINDOW_AUTOSIZE自适应窗口大小     cvShowImage("lean",img);
cvWaitKey(0);     //cvWaitKey中参数大于0 表示显示多少ms窗口自动关闭,小于或者等于0表示等待用户按键操作
cvReleaseImage(&img);
cvDestroyWindow("lean");
}


首先我们来说说
int main(int argc,char**argv)这个玩意(argc代表参数的个数,*argv[]为字符串数组,用来存放指向字符串参数的指针数组)。我们在初学的时候是不是常常看到不带参数的主函数main如下int main(),而官方给的demo中常常带有参数,这不得不从opencv的出身说起,我们都知道opencv都是用C/C++写的,而我们看到的带形参的main函数是UNIX、Linux以及Mac os等操作系统中C/C++的main函数的标准写法,也是主函数main血统最纯正的写法,但为了方便起见,往往弱化了argc和argv的用法,常常main函数也就不带参数。
再说说IplImage* ,这个玩意是opencv1.0时代的基于C语言接口而建立的图像的存储格式,如果在退出前没有release掉会造成内存泄露。自从opencv进入2.0时代就采用Mat类作为数据结构进行图像存储,这一改进使得opencv和MATLAB一样几乎可以零基础入门了,新版本增添了我们在MATLAB所熟知的imread、imshow和imwrite等函数,这样的话我们在读取图像时不用那么麻烦,可以用Mat img = imread("lean.jpg")替代。 对于cvReleaseImage和
cvDestroyWindow销毁显示图像文件窗口,同时释放为该窗口所分配的内存。对于一些小的程序,我们可以不必调用cvDestroyWindow()或cvReleaseImage,但养成习惯释放内存资源总是好的。 综上我们现在可以摆脱1.0时代了,可以选择比较方便的程序,如下:

# include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("lean.jpg");
imshow("lean",img);
cvWaitkey(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: