(1)cvLoadImage()函數
含義:是從磁盤中載入圖像的函數;
函數原型: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 也能
處理他, 但是這個函數只能創建交叉存取圖像.。
(3)一個簡單的例子
#include<opencv2\opencv.hpp>
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指針所指向的圖片通道數不正確,會出現下圖的錯誤;(該錯誤可以稱爲數組越界)