opencv打开一幅图像

转载自:http://blog.sina.com.cn/s/blog_4b1deb1b0100sepq.html

装好opencv2.2后,就可以试试编写一些简单的程序了。

    同时在安装目录下有一些例子,很不错,可以看看。下面是对opencv的初级运用:打开并显示出一幅图像。

    先给出一个函数:cvLoadImage(arg1,arg2)。从这个函数的名字就知道这是读入一张图像。带2个参数,还回值是一个IpImage的指针。

    arg1:filename,文件的名字

    arg2:可以有3个值。-1,以原始通道数读入;0,强制转化为灰度;1,读取彩色图像。

    然后是使用cvNameWindow和cvShowImage来创建窗口,显示图像。

    这样就简单的显示出一幅图像。下面是一个写好C的例子,可以参考下。

网上转载

  1. ***********************************************************************  
  2.  OpenCV example  
  3.  By Shiqi Yu 2006  
  4.  ***********************************************************************/  
  5.    
  6. #includ"cv.h"  
  7. #includ"highgui.h"  
  8.    
  9. int main( int argc, char** argv  
  10.  
  11.     IplImage* pImg; //声明IplImage指针  
  12.    
  13.     //载入图像  
  14.     if( argc == 2 &&   
  15.         (pImg cvLoadImage( argv[1], 1)) != 0  
  16.      
  17.         cvNamedWindow( "Image"1 );//创建窗口  
  18.         cvShowImage( "Image"pImg );//显示图像  
  19.    
  20.         cvWaitKey(0); //等待按键  
  21.    
  22.         cvDestroyWindow( "Image" );//销毁窗口  
  23.         cvReleaseImage( &pImg ); //释放图像  
  24.         return 0 
  25.      
  26.    
  27.     return -1 
  28.  

    同时也有一个C++的例子

  1.   
  2.    
  3. #include "cv.h"   
  4. #include "highgui.h"   
  5.    
  6. using namespace cv; //下面的所有cv相关类型不用加上前缀了   
  7.    
  8. int main(int argc, charargv[])  
  9.  
  10.     Mat img imread("lena.jpg"); //声明Mat变量并调入lena小妞(老妞了现在?)的照片   
  11.    
  12.     if(!img.data) //判断图片调入是否成功   
  13.         return -1; //调入图片失败则退出   
  14.    
  15.     namedWindow("loveLena"CV_WINDOW_AUTOSIZE); //创建窗口,并确定其为大小不可变类型窗口   
  16.    
  17.     imshow("loveLena"img); //显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口   
  18.    
  19.     waitKey(); //等待按键   
  20.    
  21.     return 0;  
  22.  

    需要说明的是C++版的图像不用费心release,在析构中会帮你搞定。同时可以看到出现了一张名为“lena.jpg”的图像。这是一张对比很强的图片很出名,同时也很养眼,呵呵。大家有兴趣可以去搜一下。我记得这是一张playboy的封面图。

    上图就是那张了,全图可以去搜索。

    重点来了。上面都是对图片(已经有格式头)的处理。很多时候情况是对原始数据进行处理。也就是说只有图像数据,没格式头。现在有3张办法

1.使用工具(或自己写个matlab或者C++的小程序)进行处理。将图像数据打包成图片格式。

2.使用mat格式。在opencv中有矩阵类型。可以将数据直接读入,然后处理矩阵。

3.对图像数据(data)进行处理。这是我常用的一种方法。

    下面对第3种方法进行简单介绍。

    在opencv中一般我喜欢将图像装入IpImage这给类。原因是函数多,简单。在IpImage中有成员变量data。从名字就可以看出是这个图像的数据存放指针。做法就是使用cvCreatImage初始化IpImage的大小,然后直接向data写入图像数据。这里对指针的使用很暴力,谨慎操作。下面贴出我的代码,很暴力。

  1. int CSAR_window::load(CString Filepath,u_char* buff)  
  2.  
  3.     cvReleaseImage(&Image);  
  4.     Image=cvCreateImage(cvSize(this->srcImage_width,srcImage_height),8,1);  
  5.     FILE *fp;  
  6.     fp=_tfopen(  Filepath.GetString(),_T("r"));  
  7.     if(fp==NULL)  
  8.       
  9.         return 0;  
  10.      
  11.     fread(Image->imageData,1,srcImage_width*srcImage_height,fp);  
  12.     fclose(fp);  
  13.     //Image->imageData (char*)buff;    
  14.     //cvWaitKey(0);//等待按键   
  15.     return 1;  
  16.  

    虽然暴力了点,但效率相当不错。处理的都是25M的文件流,耗时几乎不计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值