Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> OpenCV—基本數據結構與示例

OpenCV—基本數據結構與示例

編輯:關於Android編程

OpenCV中強大的Mat類型大家已經比較熟悉了。這裡梳理一些在工程中其他經常用到的幾種基本數據類型。包括:

Vec

Scalar

Point

Size

Rect

RotatedRect

 

 

1. Vec類

 

1.1 基本概念

 

Vec是一個模板類,主要用於存儲數值向量。

 

1.2 用法

 

(1)可用它來定義任意類型的向量

Vec myVector; // 定義一個存放8個double型變量的向量

(2)使用[]訪問Vec向量成員

myVector[0]=0;

(3)可使用以下預定義的類型

typedef Vec Vec2b;
typedef Vec Vec3b;
typedef Vec Vec4b;
typedef Vec Vec2s;
typedef Vec Vec3s;
typedef Vec Vec4s;
typedef Vec Vec2i;
typedef Vec Vec3i;
typedef Vec Vec4i;
typedef Vec Vec2f;
typedef Vec Vec3f;
typedef Vec Vec4f;
typedef Vec Vec6f;
typedef Vec Vec2d;
typedef Vec Vec3d;
typedef Vec Vec4d;
typedef Vec Vec6d;

(4)Vec支持的運算如下:

	v1 = v2 + v3
	v1 = v2 - v3
	v1 = v2 * scale
	v1 = scale * v2
	v1 = -v2
	v1 += v2
	v1 == v2, v1 != v2
	norm(v1) (euclidean norm)

1.3 示例代碼

(1)向量定義與元素的訪問

// Vec
     cv::Vec  myVector;
     for(int i=0; i

運行結果:

\

\

 

(2)基本運算

	cv::Vec v1,v2,v3;
        	for(int i=0; i

 

2. Scalar類

2.1 基本概念

Scalar是一個從Vec類引出的模板類,是一個可存放4個元素的向量,廣泛用於傳遞和讀取圖像中的像素值。

 

2.2 用法

可使用[]訪問Scalar值。或使用如下方式定義BGR三個通道的值。

cv:: Scalar( B, G, R )

2.3 示例代碼

 

(1)cv::Scalar結構

cv::Scalar myScalar;
	myScalar = cv::Scalar(0,255,0);
	cout<<"myScalar = "<

運行結果:

\

\

 

(2)讀取彩色圖像像素值

彩色圖像的每個像素對應三個部分:RGB三個通道。因此包含彩色圖像的cv::Mat類會返回一個向量,向量中包含三個8位的數值。OpenCV為這樣的短向量定義了一種類型,即我們上述的cv::Vec3b。這個向量包含三個無符號字符(unsigned character)類型的數據。

 

OpenCV存儲通道次序為:藍色、綠色、紅色即BGR。 因此,訪問彩色像素中元素的方法如下:

 

cv::Mat pImg = cv::imread("Lena.jpg",1);
	if(!pImg.data)
		return 0;
	int x = 100, y = 100;
	cv::Scalar pixel=pImg.at(x,y);
	cout<<"B chanel of pixel is = "<


 

運行結果:

\

 

3. Point類

3.1 基本概念

常用於表示2維坐標(x,y)。

3.2 用法

(1)圖像坐標

對圖像而言,我們可以這樣定義:

cv::Point pt;
pt.x = 10;
pt.y = 8;
或者

cv::Point pt = Point(10, 8);

或者

cv::Point pt(10,8);

 

(2)或使用如下預定義:

 

typedef Point_ Point2i;
typedef Point2i Point;
typedef Point_ Point2f;
typedef Point_ Point2d;

(3)基本運算

pt1 = pt2 + pt3;
pt1 = pt2 - pt3;
pt1 = pt2 * a;
pt1 = a * pt2;
pt1 += pt2;
pt1 -= pt2;
pt1 *= a;
double value = norm(pt); // L2 norm
pt1 == pt2;
pt1 != pt2;

 

3.3 示例代碼

 

(1)設置坐標點

// Point
	cv::Point pt;
	pt.x = 278;
	pt.y = 269;
	//或者
	//cv::Point  pt (278,269);
	cv::Scalar pix = pImg.at(pt);
	cout<<"pix("<

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved