含义:是从磁盘中载入图像的函数;
函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
第一个参数:filename :要被读入的文件的文件名(包括后缀);
这里要特别注意(有三种读入方法)
1,直接从任意磁盘中读取图片,必须是是绝对路径,遇到反斜杠的时候变成两个反斜杠,例如“G:\\Image\\1.jpg”;
2,将图片直接放在工程文件夹下面即可,与debug文件同级,例如".\\face2.jpg";
3,可以利用命令行参数添加文件的路径引用(这里不详述)
第二个参数:指定读入图片的颜色和深度。这里的color有几个值可以选择
这里注意(有两种方法)
1,利用变量。
CV_LOAD_IMAGE_COLOR 默认情况下,图像是以8位,3个通道的形式被读入(默认也使得图像强制转换为3通道)
CV_LOAD_IMAGE_GRAYSCALE 强制转换为单通道
CV_LOAD_IMAGE_ANGCOLOR 则以保持原始图像通道数的方式读入
CV_LOAD_IMAGE_ANYDEPTH ???这个含义好像使读入的图像为16位图像
CV_LOAD_IMAGEUNCHANGED 使得读入图像的通道数和位数与原始图像保持一致
2,利用数字代替参变量。
-1 默认读入图像的原通道数
0 强制转换为灰度图
1 读入彩色图
(2)cvCreateImage()函数
含义 :创建首地址并分配存储空间
函数原型:IplImage* cvCreateImage( CvSize size, int depth, int channels );
第一个参数:size 图像的宽和高
这个参数的设置也有好几种方式
1 :IplImage* Image = cvLoadImage("G:\\Image\\1.jpg",1);//读入一张彩色图
CvSize grayImageSize;
grayImageSize.width = Image->width;
grayImageSize.height = Image->height;
IplImage*grayImage =cvCreateImage(grayImageSize,Image->depth,1); //开辟一个Image图像相同的内存
cvCvtColor(Image,grayImage,GRAY2RGB); //将彩色图Image,转换为灰度图grayImage
2: IplImage*grayImage =cvCreateImage(CvSize(Image->width,Image->height),Image->depth,1);
3: IplImage*grayImage =cvCreateImage(CvSize(cvGetSize(Image)),Image->depth,1);
第二个参数 :图像元素的深度,可以是下面的其中之一
第三个参数:channels 每个元素(像素)通道数.可以是 1, 2, 3 或 4.通道是交叉存取的,
例如通常的彩色图像数据排列是:b0 g0 r0 b1 g1 r1 ... 虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些OpenCV 也能
处理他, 但是这个函数只能创建交叉存取图像.。
#include
int main()
{
IplImage* srcImage=cvLoadImage(".\\face2.jpg",1); //注意第二个参数的值
CvSize ImageSize;
ImageSize.height=srcImage->height;
ImageSize.width=srcImage->width;
IplImage* Image = cvCreateImage( ImageSize,srcImage->depth,1); //注意第三个参数的值
cvCvtColor(srcImage,Image,CV_RGB2GRAY); //这里的srcImage必须是指向三通道的彩色图片的指针,Image必须是单通道的灰度图片指针,不然会出现下面的错误
cvCanny(srcImage,Image,3,9,3); //进行简单的边缘检测
cvNamedWindow("原图");
cvNamedWindow("效果图");
cvShowImage("原图",srcImage);
cvShowImage("效果图",Image);
cvWaitKey(0);
cvReleaseImage(&srcImage);
cvReleaseImage(&Image);
cvDestroyWindow("原图");
cvDestroyWindow("效果图");
return 0;
}
显示结果:
注意 根据注释,若srcImage和grayImage指针所指向的图片通道数不正确,会出现下图的错误;(该错误可以称为数组越界)