cvLoadImage函数的使用
函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
filename :要被读入的文件的文件名(包括后缀);
flags :指定读入图像的颜色和深度:
指定的颜色可以将输入的图片转为3信道(CV_LOAD_IMAGE_COLOR), 单信道 (CV_LOAD_IMAGE_GRAYSCALE), 或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。
深度指定输入的图像是否转为每个颜色信道每象素8位,(OpenCV的早期版本一样),或者同输入的图像一样保持不变。
选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型。
如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR 将载入3信道图。CV_LOAD_IMAGE_ANYCOLOR和CV_LOAD_IMAGE_UNCHANGED是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有着可以和CV_LOAD_IMAGE_ANYDEPTH同时使用的优点,所以CV_LOAD_IMAGE_UNCHANGED不再使用了。
如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。
Windows位图文件 - BMP, DIB;
JPEG文件 - JPEG, JPG, JPE;
便携式图像格式 - PBM,PGM,PPM;
Sun rasters - SR,RAS;
TIFF文件 - TIFF,TIF;
OpenEXR HDR 图片 - EXR;
JPEG 2000 图片- jp2。
cvSaveImage
保存图像到文件
int cvSaveImage( const char* filename, const CvArr* image );
filename
文件名。
image
要保存的图像。
函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。
特别提醒!由于TIFF文件格式比较混乱,难以统一,此函数读取TIFF图片可能会失败。
cvLoadImage( filename, -1 ); 默认读取图像的原通道数
cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图
cvLoadImage( filename, 1 ); 读取彩色图
例:将读入图像强制转换为灰度图像显示
#include <highgui.h>
#include <cv.h>
int main(int argc, char **argv)
{
if (argc != 2)
return -1;
/*强制转换为灰度图像*/
IplImage *img = cvLoadImage(argv[1], 0);
cvNamedWindow("example");
cvShowImage("example", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("example");
return 0;
}
例:将读入图像强制转换为灰度图像显示
#include “highgui.h”
#include <cv.h>
int main(int argc, char **argv)
{
/*打开图片qq.jpg 注意 图片文件应该放在与工程文件同目录下 我使用的是VC6.0编译环境*/
IplImage *img = cvLoadImage( “qq.jpg”, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR );
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );//窗口自动调节
cvShowImage( "Example1", img );//显示图片
cvWaitKey( 0 ); //等待退出
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
}