正式進入OpenCV學習了,前面開始的都是一些環境搭建和準備工做,對一些數據結構的認識主要是Mat類的認識;ios
[1.學習目標]windows
圖像的加載:imread()數據結構
圖像的修改:cvtColor()函數
圖像的顯示:imshow()佈局
圖像的保存: imwrite()學習
[2.函數原型與參數說明]ui
a.圖像的加載:編碼
1 Mat imread( const string& filename, int flags=1 ); spa
參數說明:code
filename:文件盤符
flags:flags>0,三通道彩色圖 flags=0,灰度圖 flags<0,包含Alpha通道的圖像
b.圖像的修改:
1 void cvCvtColor( const CvArr* src, CvArr* dst, int code );
函數功能:色彩空間轉換
參數說明:
src
輸入的 8-比特 或浮點圖像.
dst
輸出的 8-比特 或浮點圖像.
code
色彩空間轉換,經過定義 CV_<src_color_space>2<dst_color_space> 常數 (見下面).
函數 cvCvtColor 將輸入圖像從一個色彩空間轉換爲另一個色彩空間。函數忽略
IplImage 頭中定義的 colorModel 和 channelSeq 域,因此輸入圖像的色彩空間應該
正確指定 (包括通道的順序,對 RGB 空間而言,BGR 意味着佈局爲 B0 G0 R0 B1 G1 R1 ...
層疊的 24-位格式,而 RGB 意味着佈局爲 R0 G0 B0 R1 G1 B1 ... 層疊的 24-位格式.
RGB[A]->Gray: Y=0.212671*R + 0.715160*G + 0.072169*B + 0*A (CV_RGB2GRAY) //RGB到灰度
RGB<=>YCrCb (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB)
RGB=>HSV (CV_BGR2HSV,CV_RGB2HSV)
RGB<=>XYZ (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB):
c.圖像的顯示:
c.1:建立窗口函數cvNamedWindow
1 int cvNamedWindow( const char* name, int flags );
參數說明:
name
窗口的名字,它被用來區分不一樣的窗口,並被顯示爲窗口標題。
flags
窗口屬性標誌。目前惟一支持的標誌是 CV_WINDOW_AUTOSIZE。當這個標誌被設置後,如
果 用 戶 不 能 手 動 改 變 窗 口 大 小 , 窗 口 大 小 會 自 動 調 整 以 適 合 被 顯 示 圖 像 ( 參 考
cvShowImage)。
c.2:銷燬窗口(指定/全部) cvDestroyWindow /cvDestroyAllWindows
1 void cvDestroyWindow( const char* name );
name
要被銷燬的窗口的名字。
函數 cvDestroyWindow 銷燬指定名字的窗口。
c.3:在指定窗口中顯示圖像 cvShowImage
1 void cvShowImage( const char* name, const CvArr* image );
參數說明:
name
窗口的名字。
image
被顯示的圖像。
函數 cvShowImage 在指定窗口中顯示圖像。若是窗口建立的時候被設定標誌
CV_WINDOW_AUTOSIZE,那麼圖像將以原始尺寸顯示;不然,圖像將被伸縮以適合窗口大
小。
d:保存圖片到指定盤符 imwrite
1 bool imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>());
參數說明:
filename 表示須要寫入的文件名,必需要加上後綴,好比「123.png」。
img 表示Mat類型的圖像數據。
params 表示爲特定格式保存的參數編碼,它有一個默認值std::vector< int >(),因此通常狀況下不用寫。
[代碼實例]
【運行環境】OpenCV3.0 + RedHat
【代碼功能】將彩色圖像轉換成灰度圖像保存
#include <iostream> #include <cv.h> #include <highgui.h> using namespace cv; using namespace std; int main (void) { Mat src = imread("./2.jpg"); //讀取2.jpg if(src.empty()) { printf("could not load image.....\n"); return -1; } namedWindow("Opencv setup deno",CV_WINDOW_AUTOSIZE); //建立窗口 imshow("Opencv setup deno",src); //顯示圖片到窗口 namedWindow("Output windows",CV_WINDOW_AUTOSIZE); //建立窗口 Mat output_image; cvtColor(src,output_image,CV_RGB2GRAY); //顏色空間轉換 <彩色圖像---灰度圖像> imshow("Output windows",output_image); //顯示圖片到窗口 imwrite("./3.jpg",output_image); //保存圖片到指定盤符 cvWaitKey(); return 0; }
[運行結果]
12-22