Hoạt động trên mảng

Một phần của tài liệu biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv (Trang 27)

2. Kinh nghiệ m:

1.2Hoạt động trên mảng

cvAbsDiff

Tính khác biệt tuyệt đối giữa hai mảng.

void cvAbsDiff(const CvArr* src1, const CvArr* src2, CvArr* dst); src1 Các mảng nguồn đầu tiên

src2 Các mảng nguồn thứ hai dst Các mảng đích

Hàm tính toán sự khác biệt tuyệt đối giữa hai mảng.

Tất cả các mảng phải có cùng một kiểu dữ liệu và kích thước tương tự (hoặc thu nhập từ đầu kích thước).

cvAbsDiffS

Tính khác biệt tuyệt đối giữa các mảng và một vô hướng.

void cvAbsDiffS(const CvArr* src, CvArr* dst, CvScalar value); #define cvAbs(src, dst) cvAbsDiffS(src, dst, cvScalarAll(0)) src Các mảng nguồn

dst Các mảng đích value Các vô hướng

Hàm tính toán sự khác biệt tuyệt đối giữa các mảng và một vô hướng.

Tất cả các mảng phải có cùng một kiểu dữ liệu và kích thước tương tự (hoặc thu nhập từ đầu kích thước).

cvAdd

Tính toán số tiền cho mỗi phần tử của hai mảng. void cvAdd(const CvArr* src1,

CvArr* dst,

const CvArr* mask=NULL); src1 Các mảng nguồn đầu tiên src2 Các mảng nguồn thứ hai dst Các mảng đích

mask mặt nạ hoạt động, 8-bit kênh mảng; quy định cụ thể các yếu tố của mảng đích

được thay đổi

Hàm bổ sung thêm một mảng khác:

dst(I)=src1(I)+src2(I) if mask(I)!=0

Tất cả các mảng phải có cùng loại, trừ mặt nạ, và kích thước tương tự (hoặc kích thước ROI).

Đối với loại có phạm vi giới hạn hoạt động này là bão hòa. cvAddS

Tính tổng của một mảng và một vô hướng. void cvAddS(const CvArr* src,

CvScalar value, CvArr* dst,

const CvArr* mask=NULL); src Các mảng nguồn

value vô hướng dst Các mảng đích

mask mặt nạ hoạt động, 8-bit kênh mảng; quy định cụ thể các yếu tố của mảng đích được thay

đổi

Hàm bổ sung thêm một giá trị vô hướng để mọi phần tử trong mảng nguồn src1 và lưu trữ kết quả trong dst. Đối với các loại có phạm vi giới hạn hoạt động này là bão hòa.

dst(I)=src(I)+value if mask(I)!=0

Tất cả các mảng phải có cùng loại, trừ mặt nạ, và kích thước tương tự (hoặc kích thước ROI). cvAddWeighted (adsbygoogle = window.adsbygoogle || []).push({});

Tính toán tổng trọng số của hai mảng. void cvAddWeighted(const CvArr* src1,

double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst); src1 Các mảng nguồn đầu tiên

alpha Trọng lượng cho các phần tử mảng đầu tiên src2 Các mảng nguồn thứ hai

beta Trọng lượng cho các phần tử mảng thứ hai dst Các mảng đích

gamma vô hướng, thêm vào số tiền mỗi

Hàm tính toán tổng hợp có trọng số của hai mảng như sau:

dst(I)=src1(I)*alpha+src2(I)*beta+gamma

Tất cả các mảng phải có cùng loại và kích thước tương tự (hoặc kích thước ROI). Đối với các loại có hạn chế phạm vi hoạt động này được bão hòa.

cvAnd

Tính toán cho mỗi phần tử bit-khôn ngoan kết hợp của hai mảng. void cvAnd(const CvArr* src1,

const CvArr* src2, CvArr* dst,

const CvArr* mask=NULL); src1 Các mảng nguồn đầu tiên src2 Các mảng nguồn thứ hai dst Các mảng đích

mặt nạ mặt nạ hoạt động, 8-bit kênh mảng; quy định cụ thể các yếu tố của mảng đích

được thay đổi

Hàm tính toán cho mỗi phần tử bit-khôn ngoan kết hợp hợp lý của hai mảng: dst(I)=src1(I)&src2(I) if mask(I)!=0

Trong trường hợp mảng điểm nổi đại diện bit được sử dụng cho hoạt động. Tất cả các mảng phải có cùng loại, trừ mặt nạ, và kích thước giống nhau.

cvAndS

Tính toán kết hợp khôn ngoan-bit cho mỗi phần tử của một mảng và một vô hướng. void cvAndS(const CvArr* src,

CvScalar value, CvArr* dst,

const CvArr* mask=NULL); src Các mảng nguồn

value vô hướng để sử dụng trong hoạt động dst Các mảng đích

mask mặt nạ hoạt động, 8-bit kênh mảng; quy định cụ thể các yếu tố của mảng đích được thay

đổi

Hàm tính toán kết hợp khôn ngoan-bit cho mỗi phần tử của một mảng và một vô hướng: dst(I)=src(I)&value if mask(I)!=0

Trước khi hoạt động thực tế, vô hướng được chuyển đổi cùng loại như của mảng (s). Trong trường hợp của các mảng đại diện của họ bit floating-point được sử dụng cho hoạt động. Tất cả

các mảng phải có cùng loại, trừ mặt nạ, và kích thước giống nhau.

Các mẫu sau đây sẽ chứng minh làm thế nào để tính giá trị tuyệt đối của mảng floating-point các yếu tố bằng cách thanh toán bù trừ các bit có ý nghĩa nhất:

float a[] = { -1, 2, -3, 4, -5, 6, -7, 8, -9 }; CvMat A = cvMat(3, 3, CV\_32F, &a); int i, absMask = 0x7fffffff;

cvAndS(&A, cvRealScalar(*(float*)&absMask), &A, 0); for(i = 0; i < 9; i++ ) printf("%.1f ", a[i]); Mã nên in: 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 cvAvg Tính trung bình (trung bình) của các phần tử mảng.

CvScalar cvAvg(const CvArr* arr, const CvArr* mask=NULL); arr Mảng (adsbygoogle = window.adsbygoogle || []).push({});

mask Mặt nạ mặt nạ hoạt động tùy chọn

Hàm tính toán M giá trị trung bình của các phần tử mảng, độc lập cho mỗi kênh:

Nếu mảng là IplImage và COI được thiết lập, Hàm xử lý các kênh được lựa chọn chỉ và các cửa hàng trung bình S0 thành phần đầu tiên vô hướng.

cvAvgSdv

Tính trung bình (trung bình) của các phần tử mảng. void cvAvgSdv(const CvArr* arr,

CvScalar* mean, CvScalar* stdDev,

const CvArr* mask=NULL); arr Mảng

mean là Con trỏ trỏ tới các giá trị trung bình đầu ra, có thể được NULL nếu nó không phải là cần thiết

stdDev Pointer đến độ lệch chuẩn đầu ra Mặt nạ mặt nạ hoạt động tùy chọn

Hàm tính toán độ lệch giá trị và tiêu chuẩn trung bình của các phần tử mảng, independently cho mỗi kênh:

Nếu mảng là IplImage và COI được thiết lập, Hàm xử lý các kênh được lựa chọn chỉ và các cửa hàng trung bình và độ lệch tiêu chuẩn để các thành phần đầu tiên của vô hướng đầu ra (mean0 và stdDev0).

cvCalcCovarMatrix

Tính ma trận hiệp phương sai của một tập các vectơ. void cvCalcCovarMatrix(const CvArr** vects,

int count,

CvArr* covMat, CvArr* avg, int flags);

vects vector đầu vào, tất cả đều phải có cùng loại và kích thước giống nhau . Các vectơ không có được 1D, họ có thểđược 2D (ví dụ, hình ảnh) ...

count số của vectơ đầu vào

covMat ma trận hiệp phương sai đầu ra nên được thả nổi điểm và vuông

avg đầu vào hay đầu ra (tùy thuộc vào những lá cờ) mảng - trung bình (trung bình) vector của

đầu vào vector

flags cờ hoạt động, một sự kết hợp của các giá trị sau

CV_COVAR_SCRAMBLED tranh giành ma trận hiệp phương sai đầu ra được tính như

scale * [vects[0] - avg, vects[1] – avg,…]T .[vects[0] – avg, vects[1] – avg,…], Đó là, ma trận hiệp phương sai số count x count. Như một ma trận hiệp phương sai bất thường được sử dụng

để nhanh chóng PCA của một tập hợp các vector rất lớn (xem, ví dụ, EigenFaces

kỹ thuật nhận diện khuôn mặt). Giá trị riêng của ma trận này "tranh giành" sẽ phù hợp với giá trị riêng của ma trận hiệp phương sai sự thật và "true" eigenvectors có thể dễ dàng

tính từ các eigenvectors của ma trận "tranh giành" hiệp phương sai.

CV_COVAR_NORMAL ma trận hiệp phương sai đầu ra được tính như sau:

scale * [vects[0] - avg, vects[1] – avg,…] .[vects[0] – avg, vects[1] – avg,…] T , Đó là, covMat sẽ là một ma trận hiệp phương sai với kích thước tuyến tính tương tự như tổng

số phần tử trong mỗi vector đầu vào. Một và chỉ có một CV_COVAR_SCRAMBLED và CV_COVAR_NORMAL phải được xác định

CV_COVAR_USE_AVG Nếu lá cờ được quy định cụ thể Hàm không tính toán avg vector đầu vào, nhưng thay vào đó, sử dụng vector avg thông qua. Điều này là hữu ích nếu avg (adsbygoogle = window.adsbygoogle || []).push({});

đã được đã được tính toán bằng cách nào đó, hoặc nếu ma trận hiệp phương sai được tính bởi các bộ phận trong trường hợp, avg là không phải là một vector có nghĩa là đầu vào thiết lập của vectơ, mà là giá trị trung bình vector của toàn bộ thiết lập.

CV_COVAR_SCALE Nếu lá cờ được quy định cụ thể, ma trận hiệp phương sai được thu nhỏ. Trong "bình thường" chế độ quy mô '1 / số, quy mô "tranh giành" chế độ đối ứng trong tổng số số phần tử trong mỗi vector đầu vào. Theo mặc định (nếu cờ không được chỉ định) ma trận hiệp phương sai không phải là quy mô ('quy mô = 1').

CV_COVAR_ROWS Có nghĩa là tất cả các vectơ đầu vào được lưu trữ như các hàng của một ma trận duy nhất, vects [0].count được bỏ qua trong trường hợp này, và avg phải là một vector đơn hàng của một thích hợp kích thước.

CV_COVAR_COLS Có nghĩa là tất cả các vectơ đầu vào được lưu trữ như các cột của một ma trận duy nhất, vects [0]. số được bỏ qua trong trường hợp này, và avg phải là một vector cột duy nhất của một kích thước thích hợp.

Hàm tính toán ma trận hiệp phương sai, và tùy chọn, vector trung bình của tập hợp các đầu vào vector. Hàm này có thể được sử dụng cho PCA, để so sánh vector sử dụng khoảng cách Mahalanobis và vv.

cvCartToPolar

Tính cường độ và/hoặc góc của vector 2D. void cvCartToPolar( const CvArr* x, const CvArr* y, CvArr* magnitude, CvArr* angle=NULL, int angleInDegrees=0); x Các mảng của x-tọa độ y Các mảng của y-tọa độ

magnitude độ lớn mảng đích của độ lớn, có thểđược thiết lập để NULL nếu nó không phải là cần thiết

angle góc mảng đích của góc độ, có thể được thiết lập để NULL nếu nó không phải là cần thiết. Các góc là đo bằng radian (0-2) hoặc ở các mức độ (từ 0 đến 360 độ).

angleInDegrees Lá cờ cho biết các góc được đo bằng radian, là chếđộ lỗi, hoặc ở các mức độ Hàm tính toán độ lớn, góc, hoặc cả hai của tất cả các vector 2d (x (I), y (I)):

magnitude(I)=sqrt(x(I)ˆ2ˆ+y(I)ˆ2ˆ ), angle(I)=atan(y(I)/x(I) )

Các góc được tính toán với 0.1 độ chính xác. Đối với điểm (0,0), góc được thiết lập là 0.

cvCbrt

Tính gốc khối

float cvCbrt(float value);

value Giá trịđầu vào giá trị dấu chấm động

Hàm tính toán căn khối của các đối số, và thông thường nó là nhanh hơn so với pow (giá trị, 1 / 3.).

Ngoài ra, lập luận tiêu cực được xử lý đúng cách. Giá trịđặc biệt (NaN) không được xử lý. cvClearND

Xóa một phần tử mảng cụ thể.

void cvClearND(CvArr* arr, int* idx); arr đầu vào mảng

idx mảng của các chỉ số thành phần

CvClearND Hàm xóa bộđể không một yếu tố cụ thể của một mảng dày đặc hoặc xóa các phần tử của một mảng thưa thớt. Nếu phần tử mảng thưa thớt không tồn tại, Hàm không có gì. cvCloneImage

Làm cho một bản sao đầy đủ của một hình ảnh, bao gồm tiêu đề, dữ liệu, và ROI. IplImage* cvCloneImage(const IplImage* image);

image hình ảnh ban đầu

Trả lại IplImage * điểm cho các bản sao hình ảnh.

cvCloneMat

Tạo một bản sao ma trận đầy đủ.

CvMat* cvCloneMat(const CvMat* mat); mat ma trận đểđược sao chép

Tạo một bản sao đầy đủ của một ma trận và trả về một con trỏđể sao chép các. cvCloneMatND

Tạo bản sao đầy đủ của một mảng đa chiều và trả về một con trỏđể sao chép các. CvMatND* cvCloneMatND(const CvMatND* mat); (adsbygoogle = window.adsbygoogle || []).push({});

mat đầu vào mảng cvCloneSparseMat

Tạo bản sao đầy đủ của mảng thưa thớt.

CvSparseMat* cvCloneSparseMat(const CvSparseMat* mat); mat đầu vào mảng

Hàm này tạo ra một bản sao của mảng đầu vào và trả về con trỏđể sao chép. cvCmp

Thực hiện mỗi phần tử so sánh của hai mảng. void cvCmp(const CvArr* src1,

const CvArr* src2, CvArr* dst, int cmpOp); src1 Các mảng nguồn đầu tiên

src2 Các mảng nguồn thứ hai. Cả hai mảng nguồn phải có một kênh duy nhất. dst Mảng đích, phải có loại 8u hoặc 8s

cmpOp Các cờ xác định mối quan hệ giữa các yếu tốđểđược kiểm tra CV_CMP_EQ src1 (I) "bằng" giá trị

CV_CMP_GT src1 (I) "quá mức" giá trị

CV_CMP_GE src1 (I) lớn hơn hoặc bằng giá trị CV_CMP_LT src1 (I) "thấp hơn" giá trị

CV_CMP_LE src1 (I) "ít hơn hoặc bằng giá trị CV_CMP_NE src1 (I) "không bằng" giá trị

Hàm so sánh các yếu tố tương ứng của hai mảng và điền vào các mặt nạđích mảng: dst(I)=src1(I) op src2(I),

dst (I) được thiết lập để 0xff (tất cả 1-bit) nếu mối quan hệ cụ thể giữa các yếu tố là đúng và 0 khác. Tất cả các mảng phải có cùng loại, trừđiểm đến, và kích thước tương tự (hoặc ROI kích thước)

cvCmpS

Thực hiện so sánh mỗi phần tử của một mảng và một vô hướng.

void cvCmpS(const CvArr* src, double value, CvArr* dst, int cmpOp); src mảng nguồn, phải có một kênh duy nhất

value giá trị vô hướng để so sánh từng phần tử mảng dst Mảng đích, phải có loại 8u hoặc 8s

cmpOp Các cờ xác định mối quan hệ giữa các yếu tốđểđược kiểm tra CV_CMP_EQ src1 (I) "bằng" giá trị

CV_CMP_GT src1 (I) "quá mức" giá trị

CV_CMP_GE src1 (I) lớn hơn hoặc bằng giá trị CV_CMP_LT src1 (I) "thấp hơn" giá trị

CV_CMP_LE src1 (I) "ít hơn hoặc bằng giá trị CV_CMP_NE src1 (I) "không bằng" giá trị

Hàm so sánh các yếu tố tương ứng của một mảng và một vô hướng và lấp đầy des- tination mặt nạ mảng:

dst (I) = src(I) op vô hướng nơi op là =,>, >=, <=, hoặc !=.

dst (I) được thiết lập để 0xff (tất cả 1-bit) nếu mối quan hệ cụ thể giữa các yếu tố là đúng và 0 khác. Tất cả các mảng phải có cùng kích thước (hoặc kích thước ROI).

cvConvertScale

Chuyển đổi một mảng khác với tùy chọn chuyển đổi tuyến tính. void cvConvertScale(const CvArr* src,

CvArr* dst, double scale=1, double shift=0);

#define cvCvtScale cvConvertScale #define cvScale cvConvertScale

src Nguồn mảng dst Điểm đến mảng scale quy mô Quy mô

shift thay đổi giá trị gia tăng cho các yếu tố nguồn mảng quy mô (adsbygoogle = window.adsbygoogle || []).push({});

Hàm có một số mục đích khác nhau, và do đó có nhiều tên khác nhau. Nó sao chép một mảng khác với tùy chọn mở rộng quy mô, đó là thực hiện đầu tiên và / hoặc chuyển đổi loại hình tùy chọn, thực hiện sau:

dst(I) = scalesrc(I) + (shift0, shift1,…) Tất cả các kênh của các mảng đa kênh được xử lý độc lập.

Loại chuyển đổi được thực hiện làm tròn số và độ bão hòa, đó là nếu kết quả của mở rộng quy mô + chuyển đổi có thể không được đại diện chính xác bởi một giá trị của loại phần tử mảng

đích, đó là thiết lập để các giá trị biểu diễn gần nhất trên trục thực.

Trong trường hợp có scale=1, shift=0 prescaling không được thực hiện. Đây là một trường hợp

đặc biệt tối ưu và nó đã cvConvert tên thích hợp . Nếu nguồn và đích các loại mảng có bằng nhau loại, điều này cũng là một trường hợp đặc biệt có thể được sử dụng để quy mô và thay

đổi một ma trận hay một hình ảnh và được caled cvScale. cvConvertScaleAbs

Chuyển đổi các phần tử mảng đầu vào một số nguyên unsigned 8-bit với tùy chọn chuyển đổi tuyến tính.

void cvConvertScaleAbs(const CvArr* src, CvArr* dst, double scale=1, double shift=0); src Nguồn mảng

dst Điểm đến mảng dst (nên có chiều sâu 8u) quy mô ScaleAbs yếu tố

thay đổi giá trị gia tăng cho các yếu tố nguồn mảng quy mô

Hàm này tương tự như cvConvertScale , nhưng nó lưu trữ giá trị tuyệt đối của chuyển đổi kết quả:

dst (I) = | scalesrc (I) + (shift0, shift1, ...)|

Hàm hỗ trợ các điểm đến mảng chỉ của 8u (8-bit số nguyên không dấu) loại, cho các loại Hàm có thểđược mô phỏng bởi một sự kết hợp của các Hàm cvConvertScale và cvAbs .

cvCvtScaleAbs

Chuyển đổi các phần tử mảng đầu vào một số nguyên unsigned 8-bit với tùy chọn chuyển đổi tuyến tính.

void cvCvtScaleAbs(const CvArr* src, CvArr* dst,

double scale=1, double shift=0); src Nguồn mảng

dst Điểm đến mảng (nên có chiều sâu 8u) scale quy mô ScaleAbs yếu tố

shift thay đổi giá trị gia tăng cho các yếu tố nguồn mảng quy mô

Hàm này tương tự như cvConvertScale , nhưng nó lưu trữ giá trị tuyệt đối của chuyển đổi kết quả:

dst (I) = | scalesrc (I) + (shift0, shift1, ...)|

Hàm hỗ trợ các điểm đến mảng chỉ của 8u (8-bit số nguyên không dấu) loại, cho các loại Hàm có thểđược mô phỏng bởi một sự kết hợp của các Hàm cvConvertScale và cvAbs .

cvCopy

Bản sao một mảng khác.

void cvCopy(const CvArr* src, CvArr* dst,

const CvArr* mask=NULL); src Các mảng nguồn

dst Các mảng đích

mask mặt nạ hoạt động, 8-bit kênh mảng; quy định cụ thể các yếu tố của mảng đích được thay

đổi (adsbygoogle = window.adsbygoogle || []).push({});

Hàm sao chép các yếu tốđược lựa chọn từ một mảng đầu vào một mảng đầu ra: dst(I) = src(I) if mask(I) = 0:

Nếu bất kỳ của các mảng thông qua IplImage loại, sau đó thu nhập từđầu của nó và các lĩnh vực COI được sử dụng. Cả hai mảng phải có cùng loại, cùng kích thước, và kích thước giống nhau. Các Hàm cũng có thể sao chép các mảng thưa thớt (mặt nạ không được hỗ trợ trong trường hợp này).

cvCountNonZero

Số lượng các yếu tố mảng khác không. int cvCountNonZero(const CvArr* arr);

arr mảng phải là một kênh duy nhất mảng hoặc một hình ảnh đa kênh với COI thiết lập Hàm trả về số lượng các yếu tố khác không trong arr:

(arr( ≠0)

Trong trường hợp của IplImage cả hai ROI và COI được hỗ trợ. cvCreateData

Phân bổ mảng dữ liệu

void cvCreateData(CvArr* arr); arr mảng tiêu đề

Hàm phân bổ hình ảnh, ma trận hoặc mảng dữ liệu đa chiều. Lưu ý rằng trong trường hợp các loại ma trận Hàm OpenCV phân bổ được sử dụng và trong trường hợp của IplImage họ được sử dụng trừ khi CV_TURN_ON_IPL_COMPATIBILITY được gọi là. Trong trường hợp thứ

Một phần của tài liệu biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv (Trang 27)