1. 程式人生 > >《OpenCV3程式設計入門》——4.2 OpenCV中常用資料結構和函式(Point、Scalar、Size、Rect、cvtColor)

《OpenCV3程式設計入門》——4.2 OpenCV中常用資料結構和函式(Point、Scalar、Size、Rect、cvtColor)

目錄

1、點的表示:Point類

2、顏色的表示:Scalar類

3、尺寸的表示:Size類

4、矩形的表示:Rect類

5、顏色空間轉換:cvtColor()函式


1、點的表示:Point類

Point類資料結構表示了二維座標系下的點,即由影象座標x和y指定的2D點。用法如下:

Point point;
point.x = 10;
point.y = 8;

或者:

Point point = Point(10, 8)

在OpenCV中有如下定義:

  • typedef Point_<int> Point2i;
  • typedef Point2i Point;
  • typedef Point_<float> Point2f;

所以,Point_<int>、Point2i、Point互相等價,Point_<float>、Point2f互相等價


2、顏色的表示:Scalar類

Scalar()表示具有4個元素的陣列,在OpenCV中用於傳遞畫素值

如下邊顏色表示式,表示定義的RGB顏色值:紅色分量為c,綠色分量為b,藍色分量為a(OpenCV中顏色通道為BGR):

Scalar(a, b, c)

Scalar類其實就是Scalar_<double>。


3、尺寸的表示:Size類

OpenCV中有如下定義:

  • typedef Size_<int> Size2i;
  • typedef Size2i Size;

所以,Size_<int>、Size2i、Size這三個型別是等價的。

OpenCV中常用的Size建構函式為:

  • Size_<int>(_TP _width,  _Tp _height)

可以使用XXX.widthXXX.height來分別表示寬度和高度。

下邊是Size的一個例子:

Size(5,5) //構造出的Size寬度和高度都為5,即XXX.width和XXX.height都為5

4、矩形的表示:Rect類

Rect類的成員變數有x,y,width,height,分別為左上角點的座標和矩形的寬和高

常用的成員函式有:

  • Size():返回值為Size
  • area():返回矩形的面積
  • contains(Points):判斷點是否在矩形內
  • inside(Rect):判斷矩形是否在該矩形內
  • tl:返回左上角點座標
  • br:返回右下角點座標 

求兩個矩形的交集和並集:

Rect rect = rect1 & rect2;
Rect rect = rect1 | rect2;

 矩形進行平移操作和縮放操作:

Rect rectShift = rect + point;
Rect rectScale = rect + size;

5、顏色空間轉換:cvtColor()函式

cvtColor()函式是顏色空間轉換函式,能夠實現RGB顏色向HSV、HSI等顏色空間的轉換,也可以轉換為灰度影象。

格式如下:

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)

引數說明:

第一個引數:輸入影象

第二個引數:輸出影象

第三個引數:顏色空間轉換識別符號

第四個引數:目標影象的通道數,若該引數為0,表示目標影象取源影象的通道數。

下邊是一個呼叫示例:

cvtColor(stcImage, dstImage, COLOR_GRAY2BGR)

cvtColor()函式識別符號如下表所示:

 下邊程式碼shi關於cvtColor()函式的測試:

# include <opencv2/opencv.hpp>
# include <iostream>

using namespace cv;
using namespace std;

void main(){
    Mat srcImage = imread("1.jpg", 1);  //載入影象
    Mat dstImage_gray, dstImage_Lab, dstImage_HLS;

    imshow("原始圖", srcImage);  //顯示原始圖

    cvtColor(srcImage, dstImage_gray, COLOR_BGR2GRAY);  //轉換顏色空間
    imshow("Gray效果圖", dstImage_gray);    //顯示效果圖

    cvtColor(srcImage, dstImage_Lab, COLOR_BGR2Lab);
    imshow("Lab效果圖", dstImage_Lab);

    cvtColor(srcImage, dstImage_HLS, COLOR_BGR2HSV);
    imshow("HLS效果圖", dstImage_HLS);

    waitKey();  //保持視窗顯示
}

執行就結果:

                                        原始圖

                                           Gray效果圖

                                       Lab效果圖

                                                HLS效果圖