1. 程式人生 > >Opencv入門筆記(1):影象載入、顯示、儲存、轉換灰度圖

Opencv入門筆記(1):影象載入、顯示、儲存、轉換灰度圖

影象載入、顯示、儲存函式:

1         影象載入函式:imread()   Mat imread(const string& filename, int flags=1);

    const string&型別的filename為載入影象的路徑(絕對路徑和相對路徑)

    flags是int型別的變數,flags>0,返回一個3通道的彩色影象;

                                         flags = 0,返回灰度影象;

                                         flags < 0,返回包含Alpha通道的載入影象。

    flags預設值為1,可以省略對其賦值。

例如:Mat srcImage = imread(‘1.jpg’);

2   影象顯示函式:imshow()  void imshow(const string& winname, InputArray mat);

         Const string&型別的winname為需要顯示的視窗名稱;

         InputArray型別的mat,填需要顯示的影象。

         例如:imshow(‘圖’,srcImage);

3       Mat型別是用於儲存影象以及其他矩陣資料的資料結構,預設尺寸為0,也可以初始化尺寸。InputArray/outputArray在opnecv中和Mat類似都是一種資料格式,而很多時候,遇到函式原型中的InputArray/outputArray型別,可以把它簡單的當做Mat型別。

4       輸出影象到檔案:imwrite()  bool imwrite(const string& filename,InputArray img, const vector<int> & params=vector<int> () );

         const string& filename表示填寫需要的檔名,需帶上字尾,如“1.jpg”;

         InputArray img表示要儲存的影象資料;

         const vector<int> & 型別的params,其預設值為vector<int> (),需要填寫時有:

         1.JPEG格式圖片,引數為0-100,表示影象質量,預設為95;

         2.PNG格式圖片,引數為0-9,表示壓縮級別,高值則表示更小尺寸和壓縮時間更長;

         3.PPM,PGM,PBM格式時,表示二進位制格式標誌,引數0或1,預設為1。

         例如:imwrite(‘123.jpg’,dstImage);

基礎影象容器Mat

5       使用Mat() 建構函式

         Mat M(2,2,CV_8UC3,Scalar(0,0,255));表示建立2行2列,CV_8UC3表示使用8位的unsigned char型,每個畫素由三個元素組成的三通道。另外,Scalar是個short型的向量,能使用指定的定製化來初始化矩陣,還可以表示顏色。

常用資料結構和函式

6       點表示:Point 

    用法:Point point;

                    point.x = 10;

                    point.y = 8;

            或者:Point point = point(10,8); 都表示為有x=10和y=8定位的2D點。

7       顏色的表示:Scalar

         Scalar(a,b,c) 表示定義的RGB值為:紅色分量為c,綠色分量為b,藍色分量為a。這裡取決於opnecv和matlab不同儲存三通道顏色方式,matlab為RGB順序,opnecv為BGR,也可以理解為兩者相反。

8       矩形表示:Rect

         Rect類的成員變數有x,y,width,height表示左上角點的座標和矩形寬和高。其成員函式有:

         Size()返回值為Size(尺寸大小),area()返回矩形的面積,contains(Point)判斷點是否在矩形內,inside(Rect)判斷矩形是否在該矩形內,tl()返回左上角點座標,br()返回右下角點座標。

         Rect rect = rect1 & rect2; 兩矩形交集

         Rect rect = rect1 | tect2; 兩矩形並集

         Rect rectShift = rect + point; 矩形平移

         Rect rectScale = rect + size; 矩形縮放

9       顏色空間轉換:cvtColor()

         其中RGB和Gray轉換有:Opnecv2版本的CV_RGB2GRAY,CV_GRAY2RGB

                                         Opencv3版本的COLOR_RGB2GRAY,COLOR_GRAY2RGB

         RGB和HSV轉換有:Opnecv2版本的CV_RGB2HSV,CV_BGR2HSV,CV_HSV2RGB,CV_HSV2BGR

                                 Opencv3版本的COLOR_RGB2HSV,COLOR_BGR2HSV,COLOR_HSV2RGB,COLOR_HSV2BGR

         即對於顏色轉換,Opnecv2的CV_字首的巨集命名規範被Opnecv3中的COLOR_式的巨集命名字首所取代,另外,Opnecv中預設的圖片通道儲存順序是BGR。

10     綜合例子:

         #include <opnecv2/opencv.hpp>

         using namespace cv;

         int main()

    {

                   Mat srcImage = imread(“1.jpg”);

                   Mat dstImage;

            cvtColor(srcImage,dstImage, COLOR_BGR2GRAY);

       imwrite(“圖1.jpg”,srcImage);

                   imshow(“原圖”,srcImage);

                   imshow(“變換圖”,dstImage);

                  waitKey(0);

       return 0;

    }