opencv学习——在MFC中读取和显示图像

       在MFC中,使用opencv库对图像进行读取和显示非常方便,支持的格式也很多。在opencv中,使用cvLoadImage函数读取图像。

             函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );

             支持的图片格式有:BMP、DIB、JPEG、JPG、JPE、PNG、PBM、PGM、PPM、SR、RAS、EXR、jp2。

             flags参数是指读入图片的方式,具体定义在highgui.h中:

/* 8bit, color or not */
#define CV_LOAD_IMAGE_UNCHANGED  -1
/* 8bit, gray */
#define CV_LOAD_IMAGE_GRAYSCALE   0
/* ?, color */
#define CV_LOAD_IMAGE_COLOR       1
/* any depth, ? */ 
#define CV_LOAD_IMAGE_ANYDEPTH    2
/* ?, any color */
#define CV_LOAD_IMAGE_ANYCOLOR    4

/* load image from file 
  iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED
  overrides the other flags
  using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED
  unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit
*/   

             cvLoadImage(filename,-1); 默认读取图像的原通道数

             cvLoadImage(filename,0); 强制转化读取图像为灰度图

             cvLoadImage(filename,0); 强制转化读取图像为灰度图

             cvLoadImage( filename, 4 ); 根据图片读取彩色图或灰度图

        CV_LOAD_IMAGE_ANYCOLOR和CV_LOAD_IMAGE_UNCHANGED是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有着可以和CV_LOAD_IMAGE_ANYDEPTH同时使用的优点,所以CV_LOAD_IMAGE_UNCHANGED不再使用了。

        在MFC中使用下段代码,通过CFileDialog获得文件路径,然后使用cvLoadImage打开。

	char szFilter[]="BMP files(*.bmp)|*.bmp|JPG files(*.jpg)|*.jpg|All files(*.*)|*.*||";
	CFileDialog ofd(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
	if(ofd.DoModal()!=IDOK) return;

	IplImage *src=cvLoadImage(ofd.GetPathName(),CV_LOAD_IMAGE_ANYCOLOR);
	if(!src) return;

        显示图像时,图像的数据全部存在IplImage结构中,通过该结构体指针来操作。最简单的方法是使用使用opencv的函数在新窗口中显示。

	cvNamedWindow("使用OpenCV显示的图片", 0);
	cvShowImage("使用OpenCV显示的图片", src);
        另一种形式是转换成BITMAPINFO对象,直接在MFC窗口中贴图。这种方式在需要嵌入式图片显示的场合比较常见。具体的实现可参考例子:

        http://download.csdn.net/detail/shawpan/7280135

        另外一个例子是使用这两种方法在新窗口中显示图像:(1、使用opencv的函数;2、自定义一个非模式对话框,然后把图像粘在该对话框中)

        http://download.csdn.net/detail/shawpan/7279263





             

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值