1. Trang chủ
  2. » Luận Văn - Báo Cáo

biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv

163 541 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 163
Dung lượng 1,19 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv

Trang 1

TRƯỜNG CAO ĐẲNG KỸ

KHOA CÔNG NGH

Đề tài nghiên cứu khoa học sinh viên:

BIÊN DỊCH TÀI HƯ

BỘ THƯ VI Sinh viên thực hiện: BÙI T

Lớp: 10CDTP1

Người hướng dẫn: NGUYỄ

Ỹ THUẬT LÝ TỰ TRỌNG TP.HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN

c sinh viên:

CH TÀI HƯỚNG DẪN SỬ DỤNG THƯ VIỆN NGUỒN MỞ OPENCV n: BÙI TẤN AN

ỄN NGỌC TRANG

CHÍ MINH

Trang 2

Mục lục:

Phần I Mở đầu… ……… ……… ……… ……… ……

1 Lý do chọn đề tài… ……… ……… ……… ………… ……

2 Xác định mục tiêu nghiên cứu: … ……… ……… ……

3 Đối tượng nghiên cứu: … ……… ……… ……….……

4 Phạm vi nghiên cứu: … ……….……… ……….……

5 Đặt giả thuyết: … ……… ……… ……… ………

6 Thực trạng và khảo sát về bộ thư viện nguồn mở OpenCV:……… ……

6.1 Thực trạng: … ……… ……… ……… ………… ……

6.2 Khảo sát… ……… ……… ……… ……… ……

Phần II Quy trình thực hiện… ……… ……… ………

Phần III Tổng kết… ……… ……… ……… ……….……

1 Hướng phát triển của đề tài: … ……… ………

2 Kinh nghiệm: … ……… ……… ……… ……

Tài liệu hướng dẫn sử sụng OpenCV v2.1… ……… ……

3

3

3

3

4

4

5

5

5

15

16

17

17

19

Trang 3

2 Xác định mục tiêu nghiên cứu:

- Mục tiêu: Đề tài này,tôi sẽ biên dịch tài liệu h

với code mẫu giúp cho người học dễ dàng trong cách sử dụng bộ th

- Mục đích: Cung cấp nguồn tài liệu tiếng Việt cho sinh viên Việt Nam tham khảo, học tập, nghiên cứu lập trình dễ dàng trên bộ th

3 Đối tượng nghiên cứu:

- Đối tượng nghiên cứu: Bộ thư viện OpenCV

- Khách thể nghiên cứu: Sinh viên ngành Công nghệ thông tin,

muốn học tập, nghiên cứu bộ thư viện này

CH TÀI HƯỚNG DẪN SỬ DỤNG THƯ VIỆN NGUỒN MỞ OPENCV

ất quan tâm tới công nghệ nhận dạng máy tính, công nghệ này rất mới, ứng dụng rộng rãi

ặc biệt là trong lĩnh vực chế tạo robot Nhưng việc tìm kiếm

ồn tài liệu Tiếng Việt về OpenCV hiện nay rất hiếm, phần lớn tài liệu là bằng tiếng Anh,

ăn trong cho sinh viên muốn học hoặc ứng dụng Vì lí do trên tôi chọn

ốn cung cấp cho các bạn nguồn tài liệu Tiếng Việt, rất mong sẽ giúp ích cho các

ề tài này,tôi sẽ biên dịch tài liệu hướng dẫn từ tiếng Anh sang tiếng Việt, cùng

ời học dễ dàng trong cách sử dụng bộ thư viện để lập trình

ấp nguồn tài liệu tiếng Việt cho sinh viên Việt Nam tham khảo, học tập,

ứu lập trình dễ dàng trên bộ thư viện OpenCV

ồn tài liệu Tiếng Việt về OpenCV hiện nay rất hiếm, phần lớn tài liệu là bằng tiếng Anh,

ốn học hoặc ứng dụng Vì lí do trên tôi chọn đề tài

ốn cung cấp cho các bạn nguồn tài liệu Tiếng Việt, rất mong sẽ giúp ích cho các

ớng dẫn từ tiếng Anh sang tiếng Việt, cùng

ể lập trình

ấp nguồn tài liệu tiếng Việt cho sinh viên Việt Nam tham khảo, học tập,

ặc biệt là các lập trình viên

Trang 4

Với nguồn tài liệu được biên dịch sang tiếng Việt, việc bạn học bộ thư viện này sẽ thật sự dễ dàng Nó cần thiết khi bạn quan tâm tới Với nguồn tài liệu Tiếng Việt sẽ rất cần thiết để việc học của bạn trở nên dễ dàng hơn rất nhiều

Biên dịch tài liệu này với code mẫu sẽ giúp bạn thật sự dễ hiểu và có thể tự học một cách hiệu quả, đạt kết quả như mong muốn

Khi hoàn thành đề này, các sinh viên viên, các lập trình viên Việt Nam có thể dễ dàng sử dụng

bộ thư viện OpenCV để viết ra các phần mềm ứng dụng như đã nêu trên, nhanh chóng đón bắt công nghệ thế giới

Trang 5

6 Thực trạng và khảo sát về bộ thư viện nguồn mở OpenCV:

6.1 Thực trạng:

- Nguồn tài liệu Tiếng Việt về OpenCV hiện nay rất hiếm, phần lớn tài liệu là bằng tiếng Anh, gây nhiều khó khăn trong cho sinh viên muốn học hoặc ứng dụng Trên các diễn đàn hay website cũng có rất nhiều đề tài nói về OpenCV Ví dụ như http://khoinguonit.com/f93/, http://www.ieev.org/ Nhưng hầu hết các trang này đều không có tài liệu thống nhất về OpenCV tiếng Việt mà chỉ có một số tài liệu đơn lẻ, hoặc tài liệu bằng tiếng Anh Ở các trường đại học cũng tương tự là tài liệu học tập cho sinh viên đều là tiếng Anh Sinh viên Việt Nam muốn khởi đầu việc nghiên cứu đều phải gặp rất nhiều khó khăn do rào cản ngôn ngữ (Tiếng Anh), việc hiểu một thuật ngữ mang tính kỹ thuật với một người mới rất mất thời gian và không bao giờ là dễ dàng

6.2 Khảo sát:

Phiếu khảo sát đã phát ra là 60 phiếu và thu về được 56 phiếu Dưới đây là biểu đồ chi tiết các

câu hỏi khảo sát được

1 Không

2 Có, nhưng không nhiều

3 Rất quan tâm

1 30%

2 59%

3 11%

1 Bạn có quan tâm về Robot không?

Trang 6

2 72%

3 7%

2 Bạn có quan tâm về công nghệ nhận dạng khuôn mặt người

bằng máy tính?

1 41%

2 59%

(3) 0%

3 Bạn có biết Thị giác máy tính?

Trang 7

2 62%

3 18%

4 Đây là công nghệ nhận dạng máy tính,

bạn quan tâm tới nó chứ?

1 31%

2 23%

3 5%

4 41%

5 Những ứng dụng của bộ thư viện này mà bạn biết?

Trang 8

2 Xử lí màu sắc và độ phân giải

3 An ninh (camera thông minh, nhân dạng)

4 Cả 2 và nhiều ứng dụng khác nữa

1 Chưa bao giờ

2 Chỉ đọc qua cho biết

3 Chắc chắn rồi

1 34%

2 37%

3 29%

6 Đã bao giờ bạn tìm kiếm tài liệu tự học về một bộ nguồn

thư viện nào?

1 14%

2 70%

3 16%

6b Bạn muốn tự học bộ thư viện này chứ?

Trang 9

2 7%

7 Nếu học, bạn muốn nguồn tài hướng dẫn bằng Tiếng Việt

chứ?

1 29%

2 62%

3 9%

8 Tài liệu về thư viện này bằng Tiếng Việt có nhiều

không?

Trang 10

2 27%

3 43%

4 3%

9 Bạn có tìm kiếm tài liệu liên quan đến bộ thư viện không?

Trang 11

1 Không

2 Có, nhưng ít

3 Nhiều

1 Không quan tâm

2 Tức nhiên là Tiếng Việt

3 Sao cũng được

1 32%

2 63%

3 5%

10 Nguồn tài liệu Tiếng Việt về nó rất hiếm, bạn có nhiều

không?

1 11%

2 84%

3 5%

11 Bạn muốn đọc tài liệu về OpenCV bằng ngoại ngữ hay

bằng tiếng Việt?

Trang 12

1 Chưa bao giờ

2 14%

3 16%

4 12%

12 Bạn đã từng lập trình với thư viện OpenCV này chưa?

1 73%

2 11%

3 11%

4 5%

13 Nếu bạn đã từng lập trình với thư viện OpenCV, bạn có gặp

khó với cách dùng các hàm trong OpenCV khi tài liệu bằng

tiếng Anh?

Trang 13

2 53%

3 14%

14 Việc chúng tôi biên dịch nguồn tài liệu này sang Tiếng Việt

bạn thấy thế nào?

Trang 15

Phần II Quy trình thực hiện:

- Từ 5/9/2011 đến 1/10/2011: Xác định đề tài nghiên cứu và đăng kí đề tài

- Từ 3/10/2011 đến 22/10/2011: Biên soạn đề cương nghiên cứu, phát bảng khảo sát và thống

kê kết quả khảo sát

- Từ 24/10/2011 đến 25/12/2011: Thực hiện sản phẩm:

1 Lọc nguồn tài liệu cần dịch từ nguồn tài liệu nước ngoài

2 Chia nội dung cần dịch ra các chương, phần, hàm cụ thể và sắp xếp

3 Duyệt sơ lượt các toàn bộ các phần đã chọn và sắp xếp lại lần nữa

4 Bắt đầu dịch toàn bộ theo thứ tự đã xếp Công cụ hỗ trợ: translate.google.com.vn, tratu.soha.vn, vdict.com

5 Sau khi dịch xong, đọc lại để sửa lỗi

6 Đóng gói sản phẩm, đem đi in

- Từ 25/12/2011: Nộp bài về cho khoa

Trang 16

Phần III Tổng kết

Tài liệu tham khảo:

- OpenCV Reference Manual v2.1

http://www.box.com/s/l8pq7x8q1ktfmecbatfv

- Learning OpenCV: computer vision with the OpenCV library

http://books.google.com/books?id=seAgiOfu

q&f=false

Tác giả: Gary Bradski , Adrian Kaehler

- Algorithms for Image Processing and Computer Vision

http://books.google.com/books?id=BK

6134&hl=vi&pg=PA15#v=onepage&

Tác giả: J R Parker

Trang chủ: http://opencv.willowgarage

Giới thiệu về OpenCV:

- OpenCV là viết tắt của Open Source Computer Vision

trình gồm nhiều hàm C và một số lớp C++ dựa trên thuật toán phổ biến trong xử lí ảnh và thị giác máy tính

-Bộ thư viên này còn được viết trên ngôn ngữ

tản: Windows, Linux, Android và Mac

- OpenCV cung cấp rất nhiều kiểu dữ liệu có cấu trúc nhằm hỗ trợ tối việc xử lí

ết tắt của Open Source Computer Vision Đó là một thư viện nguồn mở

ồm nhiều hàm C và một số lớp C++ dựa trên thuật toán phổ biến trong xử lí ảnh và thị

ợc viết trên ngôn ngữ Python và Java Lập trình được trên nhiều nền Windows, Linux, Android và Mac

ấp rất nhiều kiểu dữ liệu có cấu trúc nhằm hỗ trợ tối việc xử lí

Trang 17

- Xử lí màu sắc và độ phân giải ảnh

- Xử lí hình trạng và phân tách chi tiết

- Tái dựng ảnh ba chiều và diễn giải ảnh

- Nhận dạng và giám sát thực thể

- Y khoa (chẩn đoán, giải phẫu)

- An ninh (camera thông minh, nhận dạng)

- Giao thông (theo dõi lưu thông, điều khiển xe)

- Tự động hóa sản xuất (đo lường, kiểm định chất lượng) và v.v…

Kinh nghiệm:

Trong quá trình thực hiện đề tài, số từ vựng tiềng Anh của tôi đã tăng lên, thêm được nhiều từ vựng mới, đặc biệt là các từ chuyên ngành công nghệ thông tin

Tôi được biết về quy trình đề thực hiện một đề tài nghiên cứu khoa học, viết báo cáo tổng kết

đề nghiên cứu khoa học

Hướng phát triển của đề tài:

Bộ thư viện OpenCV ứng dụng được trong rất nhiều ngành nghề khác nhau, như an ninh trong việc nhận dạng vân tay, đối tượng, tiết kiệm rất nhiều thời gian và công sức thay cho con người, nâng cao hiệu quả công việc Chế tạo robot tự động hóa Xử lí, phục chế hình ảnh trong siêu âm… Rất nhiều ứng dụng phục vụ con người, đây là sự đón đầu công nghệ thế giới cho Việt Nam Tài liệu hướng dẫn sử dụng OpenCV này sẽ tạo đòn bẩy đưa công nghệ tương lai về với Việt Nam Như đã nói, các lập trình viên Việt Nam sẽ sử dụng tài liệu hướng dẫn sử dụng

bộ thư viện OpenCV viết các phần mềm ứng dụng cao cấp trên, phục vụ cho cuộc sống, phát triển đất nước

Trong thời gian tới, tôi sẽ tiếp tục hoàn thiện bộ tài hướng dẫn này hơn nữa, nâng cấp bộ tài liệu này theo các phiên bản OpenCV mới hơn, tiếp tục làm bộ tài liệu hướng dẫn cho OpenCV C++ API, java

Bộ tài liệu này sẽ được chia sẻ miễn phí hoàn trên mạng, để mọi người đều được sử dụng dễ dàng đóng góp, hoàn thiện nó hơn nữa Mọi người cũng có thể chia sẻ kiến thức, kinh nghiệm lập trình với OpenCV, cộng đồng cùng nhau phát triển và phát triển đất nước

Trang 19

Tài liệu hướng dẫn sử sụng OpenCV v2.1

Mục lục:

Chương 1: cxcore Hàm cốt lõi………

1.1 Các Struct cơ bản………

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

1.3 Cấu trúc động………

1.4 Các hàm vẽ……….

1.5 XML/YAML Persistence………

1.6 Phân nhóm và Tìm kiếm trong không gian đa chiều……….

Chương 2: cv Xử lý hình ảnh và thị giác máy tính……….

2.1 Lọc hình ảnh……….

2.2 Ảnh hình học biến đổi………

2.3 Hình ảnh hỗn hợp biến đổi………

2.4 Biểu đồ……… ……….

Chương 3: cvaux Các hàm mở rộng của Thị Giác Máy Tính… ……….

Chương 4: highgui Cao cấp giao diện và I/O… ……… ……… …….

4.1 Giao diện người dùng… ……… ……… ……… ………

4.2 Đọc / ghi hình ảnh và video… ……… ……… ……… ………

20

20

27

59

86

94

111

113

113

121

128

142

152

153

153

157

Trang 20

Chương 1: cxcore Hàm cốt lõi

1.1 Các Struct cơ bản

CvPoint

2D điểm với số nguyên tọa độ (thường là zero-based)

typedef struct CvPoint

inline CvPoint cvPoint( int x, int y );

/ * Chuyển đổi từ CvPoint2D32f * /

inline CvPoint cvPointFrom32f( CvPoint2D32f point );

CvPoint2D32f

2D điểm với tọa độ điểm nổi

typedef struct CvPoint2D32f

inline CvPoint2D32f cvPoint2D32f (double x, double y);

/ * Chuyển đổi từ CvPoint * /

inline CvPoint2D32f cvPointTo32f( CvPoint point );

CvPoint3D32f

3D điểm với tọa độ điểm nổi

typedef struct CvPoint3D32f

Trang 21

inline CvPoint3D32f cvPoint3D32f( double x, double y, double z );

CvPoint2D64f

2D điểm với tọa độ điểm độ chính xác kép nổi

typedef struct CvPoint2D64f

inline CvPoint2D64f cvPoint2D64f( double x, double y );

/ * Chuyển đổi từ CvPoint * /

inline CvPoint2D64f cvPointTo64f( CvPoint point );

CvPoint3D64f

3D điểm với tọa độ điểm độ chính xác kép nổi

typedef struct CvPoint3D64f

Pixel chính xác kích thước của hình chữ nhật

typedef struct CvSize

Chiều rộng chiều rộng của hình chữ nhật

Chiều cao chiều cao của hình chữ nhật

Trang 22

typedef struct CvSize2D32f

Chiều rộng chiều rộng của hình chữ nhật

Chiều cao chiều cao của hình chữ nhật

/ * Constructor * /

inline CvSize2D32f cvSize2D32f( double width, double height );

CvRect

Bù đắp (thường là góc trên bên trái) và kích thước của hình chữ nhật

typedef struct CvRect

x x-phối hợp của các góc trên cùng, bên trái

y y-phối hợp của góc trên bên trái (phía dưới bên trái cho Windows bitmap )

Chiều rộng chiều rộng của hình chữ nhật

Chiều cao chiều cao của hình chữ nhật

/ * Constructor * /

inline CvRect cvRect( int x, int y, int width, int height );

CvScalar

Một container cho 1, 2, 3 - 4-tuples của đôi

typedef struct CvScalar

Trang 23

type Một sự kết hợp của CV_TERMCRIT ITER và CV_TERMCRIT EPS

max_iter số lần lặp tối đa

epsilon yêu cầu độ chính xác

/ * Constructor * /

inline CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon );

/ * Kiểm tra và chuyển đổi một CvTermCriteria để

type = CV_TERMCRIT_ITER + CV_TERMCRIT_EPS

và cả hai max_iter và epsilon là hợp lệ * /

CvTermCriteria cvCheckTermCriteria( CvTermCriteria criteria, double default_eps, int default_max_iters );

Trang 24

type gõ chữ ký CvMat (CV MAT MAGIC VAL) có chứa các loại của các yếu tố và cờ

step hàng chiều dài theo byte

refcount Bên dưới tham chiếu truy cập dữ liệu

data Con trỏ dữ liệu để các dữ liệu ma trận thực tế

rows Số hàng của hàng

cols Số cột của cột

Ma trận được lưu trữ hàng bởi hàng Tất cả các hàng được liên kết bởi 4 byte

CvMatND

Đa chiều đa kênh mảng dày đặc

typedef struct CvMatND

dims làm mờ số của kích thước mảng

refcount Bên dưới tham chiếu truy cập dữ liệu

data Con trỏ dữ liệu để các dữ liệu ma trận thực tế

dim mờ Đối với mỗi chiều, cặp đôi này (số yếu tố, khoảng cách giữa các thành phần trong byte )

CvSparseMat

Multi-chiều thưa thớt mảng đa kênh

Trang 25

typedef struct CvSparseMat

dims Số mờ của kích thước

refcount Bên dưới tham chiếu truy cập Không được sử dụng

heap Một đống hồ bơi của các nút bảng băm

hashtable Các bảng băm Mỗi mục là một danh sách các nút

hashsize Kích thước của bảng băm

total tổng của các nút mảng thưa thớt

valoffset giá trị bù đắp của các nút mảng, theo byte

idxoffset Chỉ số bù đắp của các nút mảng, theo byte

size mảng có kích thước kích thước

struct _IplROI *roi;

struct _IplImage *maskROI;

void *imageId;

struct _IplTileInfo *tileInfo;

int imageSize;

char *imageData;

Trang 26

ID Phiên bản, luôn luôn bằng 0

nChannels Số của các kênh Hầu hết các Hàm OpenCV hỗ trợ 1-4 kênh

alphaChannel bị bỏ qua bởi OpenCV

depth kênh sâu trong bit + bit dấu tùy chọn (IPL SIGN chiều sâu) Hỗ trợ độ sâu là:

IPL_DEPTH_8U Unsigned số nguyên 8-bit

IPL_DEPTH_8S Đăng ký số nguyên 8-bit

IPL_DEPTH_16U Unsigned số nguyên 16-bit

IPL_DEPTH_16S Đăng ký số nguyên 16-bit

IPL_DEPTH_32S Đăng ký số nguyên 32-bit

IPL_DEPTH_32F đơn chính xác nổi

IPL_DEPTH_64F độ sâu chính xác điểm nổi Double-64F

colorModel Bỏ qua OpenCV Hàm OpenCV CvtColor yêu cầu nguồn và destination màu không gian như các thông số

channelSeq bị bỏ qua bởi OpenCV

dataOrder 0 = IPL_DATA_ORDER_PIXEL - kênh màu xen kẽ, 1 màu sắc riêng biệt kênh CreateImage chỉ tạo ra hình ảnh với các kênh xen kẽ Ví dụ, thông thường bố trí của một hình ảnh màu sắc là: b00g00r00b10g10r10

origin nguồn gốc 0 - gốc trên bên trái, 1 - dưới bên trái có nguồn gốc (Windows bitmap phong cách )

align sắp xếp sắp các dòng hình ảnh (4 hoặc 8) OpenCV bỏ qua điều này và sử dụng widthStep thay vì

width Ảnh rộng chiều rộng tính bằng pixel

height Ảnh cao chiều cao tính bằng pixel

roi khu vực quan tâm (ROI) Nếu không phải là NULL, chỉ có khu vực này hình ảnh sẽ được

xử lý

maskROI Phải được NULL trong OpenCV

imageId Phải được NULL trong OpenCV

tileInfo Phải được NULL trong OpenCV

imageSize ảnh kích thước dữ liệu theo byte Đối với dữ liệu xen kẽ, bằng hình ảnh-> chiều cao mage-> widthStep

imageData Một con trỏ vào các dữ liệu hình ảnh liên kết

widthStep Kích thước của một dòng hình ảnh liên kết, trong byte

BorderMode biên giới hoàn thành chế độ, bị bỏ qua bởi OpenCV

BorderConst biên giới hoàn thành chế độ, bị bỏ qua bởi OpenCV

imageDataOrigin Một con trỏ đến nguồn gốc của dữ liệu hình ảnh (không nhất thiết phải phù hợp) Đây là

được sử dụng cho deallocation hình ảnh

Của IplImage cấu trúc được thừa kế từ Thư viện xử lý hình ảnh của Intel, trong đó

Trang 27

định dạng có nguồn gốc OpenCV chỉ hỗ trợ một tập hợp con của các định dạng IplImage có thể , như được nêu trong

tham số danh sách trên

Ngoài ra các hạn chế trên, OpenCV xử lý ROIs khác nhau OpenCV Hàm

yêu cầu rằng kích thước hình ảnh hoặc kích cỡ ROI của tất cả các nguồn và hình ảnh điểm đến phù hợp chính xác Trên

Mặt khác, ảnh xử lý Intel Thư viện xử lý khu vực giao nhau giữa các

hình ảnh nguồn và đích đến (hoặc ROIs), cho phép họ thay đổi một cách độc lập

CvArr

Tùy tiện mảng

typedef void CvArr;

CvArr metatype chỉ được sử dụng như một tham số Hàm để xác định rằng Hàm chấp nhận mảng của nhiều loại, chẳng hạn như IplImage, CvMat * hoặc thậm chí CvSeq * đôi khi Các

cụ thể loại mảng được xác định tại thời gian chạy bằng cách phân tích 4 byte đầu tiên của tiêu

đề

1.2 Hoạ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,

const CvArr* src2,

Trang 28

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,

cvAddWeighted

Tính toán tổng trọng số của hai mảng

void cvAddWeighted(const CvArr* src1,

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

Trang 29

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,

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:

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

Trang 30

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,

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,

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ư sau :

Trang 31

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

đã đượ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

Trang 32

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);

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,

Trang 33

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-

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

#define cvConvert(src, dst ) cvConvertScale((src), (dst), 1, 0 )

Trang 34

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ô

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

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

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

Trang 35

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ợ

Tạo một tiêu đề hình ảnh và phân bổ các dữ liệu hình ảnh

IplImage* cvCreateImage(CvSize size, int depth, int channels);

size Hình ảnh kích thước chiều rộng và chiều cao

depth Bit độ sâu của các yếu tố hình ảnh Xem IplImage cho độ sâu hợp lệ

channels số kênh của các kênh cho mỗi điểm ảnh Xem IplImage để biết thêm chi tiết Hàm này chỉ tạo ra hình ảnh với các kênh xen kẽ

Cuộc gọi này là một hình thức rút gọn của

header = cvCreateImageHeader(size, depth, channels);

cvCreateData(header);

Trang 36

cvCreateImageHeader

Tạo một tiêu đề hình ảnh nhưng không phân bổ dữ liệu hình ảnh

IplImage* cvCreateImageHeader(CvSize size, int depth, int channels);

size kích thước chiều rộng và chiều cao

depth Hình ảnh chiều sâu chiều sâu (xem cvCreateImage)

channels Số lượng các kênh của các kênh (xem cvCreateImage)

Cuộc gọi này là một chất tương tự

Tạo ra một tiêu đề ma trận và phân bổ dữ liệu ma trận

CvMat* cvCreateMat(int rows,int cols,int type);

rows Số lượng hàng trong ma trận

cols Số lượng cột trong ma trận

type Các loại ma trận các yếu tố trong hình thức CV_<bit depth><S|U|F> C <số kênh>,

trong đó S = ký kết, U = unsigned, F = float Ví dụ, CV 8UC1 có nghĩa là các yếu tố được bit unsigned và có 1 kênh, và CV 32SC2 có nghĩa là các yếu tố 32-bit đã ký và có 2 kênh Đây là hình thức ngắn gọn:

8-CvMat* mat = cvCreateMatHeader(rows, cols, type);

cvCreateData(mat);

cvCreateMatHeader

Tạo một tiêu đề ma trận, nhưng không phân bổ dữ liệu ma trận

CvMat* cvCreateMatHeader(int rows,int cols,int type);

rows Số lượng hàng trong ma trận

cols Số lượng cột trong ma trận

type Loại các yếu tố ma trận, xem cvCreateMat

Hàm phân bổ một tiêu đề ma trận mới và trả về một con trỏ đến nó Các dữ liệu ma trận có thể sau đó được phân bổ sử dụng cvCreateData hoặc thiết lập một cách rõ ràng để người sử dụng

dữ liệu thông qua giao cvSetData

cvCreateMatND

Tạo tiêu đề và phân bổ dữ liệu cho một mảng đa chiều dày đặc

CvMatND* cvCreateMatND(int dims,const int* sizes,int type);

dims số kích thước mảng Điều này không được vượt quá CV_MAX_DIM (32 theo mặc định, nhưng có thể được thay đổi thời gian xây dựng)

sizes mảng có kích thước kích thước

type Loại phần tử mảng, xem cvCreateMat

Trang 37

Đây là một hình thức viết tắt của:

CvMatND* mat = cvCreateMatNDHeader(dims, sizes, type);

cvCreateData(mat);

cvCreateMatNDHeader

Tạo một tiêu đề ma trận mới nhưng không phân bổ dữ liệu ma trận

CvMatND* cvCreateMatNDHeader(int dims, const int* sizes, int type);

dims Number of array dimensions

kích thước mảng có kích thước kích thước

Loại kiểu của các phần tử mảng, xem cvCreateMat

Hàm phân bổ một tiêu đề cho một mảng đa chiều dày đặc Các mảng dữ liệu có thể tiếp tục được phân bổ bằng cách sử dụng cvCreateData hoặc thiết lập một cách rõ ràng để người sử dụng dữ liệu thông qua giao cvSetData

cvCreateSparseMat

Tạo mảng thưa thớt

CvSparseMat* cvCreateSparseMat(int dims, const int* sizes, int type);

dims số kích thước mảng Ngược lại với ma trận dày đặc, số lượng kích thước thực tế không giới hạn (lên đến 216)

sizes kích thước mảng có kích thước kích thước

type Loại phần tử mảng Giống như cho CvMat

Hàm phân bổ một mảng đa chiều thưa thớt Ban đầu, các mảng không có tính,

cvGet hoặc cvGetReal trả về zero cho mỗi chỉ số

cvCrossProduct

Tính sản phẩm chéo của hai vectơ 3D

void cvCrossProduct(const CvArr* src1, const CvArr* src2, CvArr* dst);

src1 Các vector nguồn đầu tiên

src2 Các vector nguồn thứ hai

dst Các vector đích

Hàm tính toán sản phẩm chéo của hai vectơ 3D:

dst = src1 x src2 hoặc:

dst Điểm đến mảng có cùng kích thước và cùng một loại như là nguồn gốc

cờ chuyển đổi cờ, một sự kết hợp của các giá trị sau

Trang 38

CV_DXT_FORWARD một biến đổi tiến 1D hoặc 2D

CV_DXT_ngược một 1D ngược hoặc chuyển đổi 2D

CV_DXT_ROWS làm một biến đổi về phía trước hoặc ngược của tất cả các hàng cá nhân của

ma trận đầu vào Lá cờ này cho phép người dùng chuyển đổi các vector nhiều cùng một lúc và

có thể được sử dụng để giảm các chi phí (mà đôi khi lớn hơn gấp nhiều lần so với chế biến chính nó), để làm biến đổi 3D và chiều cao hơn và vv

Hàm thực hiện một biến đổi về phía trước hoặc nghịch đảo của một 1D hoặc mảng 2D nổi điểm:

Chuyển tiếp cô sin biến đổi của vector 1D của các yếu tố N:

Y = C(N) X nơi

Và = 1, = 2 vớ > 0

Inverse cosin biến đổi của vector 1D của các yếu tố N:

(C(N) là ma trận trực giao, C(N) C(N)T = I)

Chuyển tiếp cô sin biến đổi 2D M x N ma trận:

Inverse cô sin biến đổi của vector 2D của các yếu tố M x N:

dst Điểm đến mảng có cùng kích thước và cùng một loại như là nguồn gốc

flags chuyển đổi cờ, một sự kết hợp của các giá trị sau :

CV_DXT_FORWARD một biến đổi tiến 1D hoặc 2D Kết quả là không thu nhỏ lại CV_DXT_INVERSE một 1D ngược hoặc chuyển đổi 2D Kết quả là không thu nhỏ lại CV_DXT_FORWARD và CV_DXT_INVERSE nghịch đảo là loại trừ lẫn nhau, tất nhiên

CV_DXT_SCALE quy mô kết quả: chia nó cho số lượng các phần tử mảng Thông thường, đó là kết hợp với CV_DXT_INVERSE, và người ta có thể sử dụng một phím tắt CV_DXT_INV_SCALE

CV_DXT_ROWS làm một biến đổi về phía trước hoặc ngược của tất cả các hàng cá nhân của ma trận đầu vào Cờ này cho phép người sử dụng để chuyển đổi vector nhiều cùng một lúc và có thể được sử dụng để giảm chi phí (mà đôi khi lớn hơn gấp nhiều lần so với chế biến chính nó), để làm biến đổi 3D và chiều cao hơn và vv

CV_DXT_INVERSE_SCALE giống như

CV_DXT_INVERSE + CV_DXT_SCALE

Trang 39

nonzeroRows Số hàng khác không trong mảng nguồn (trong trường hợp của một tiến 2d xuyên hình thức), hoặc một số hàng quan tâm trong mảng điểm đến (trong trường hợp của một 2d ngược biến đổi) Nếu giá trị là tiêu cực, bằng không, hoặc lớn hơn tổng số của hàng Tham số

có thể được sử dụng để tăng tốc độ chập 2d / tương quan khi tính toán

thông qua DFT Xem ví dụ dưới đây

Hàm thực hiện một biến đổi về phía trước hoặc nghịch đảo của một 1D hoặc mảng 2D nổi điểm:

Chuyển tiếp biến đổi Fourier của vector 1D của các yếu tố N:

Inverse biến đổi Fourier của vector 1D của các yếu tố N:

Chuyển tiếp biến đổi Fourier của vector 2D của các yếu tố M x N:

Y = F(M) X F(N)Inverse Fourier biến đổi của vector 2D của các yếu tố M x N:

Trong trường hợp các dữ liệu thực sự (một kênh), định dạng đóng gói, được vay mượn từ IPL, được sử dụng để đại diện các kết quả của một biến đổi Fourier về phía trước hoặc đầu vào cho một biến đổi Fourier ngược:

Lưu ý: cột cuối cùng là nếu N là thậm chí, hàng cuối cùng là nếu M thậm chí còn Trong trường hợp của 1D thực sự chuyển đổi kết quả trông giống như dòng đầu tiên của ma trận trên Dưới đây là ví dụ về làm thế nào để tính toán 2D chập sử dụng DFT

CvMat* A = cvCreateMat(M1, N1, CVg32F);

CvMat* B = cvCreateMat(M2, N2, A->type);

// it is also possible to have only abs(M2-M1)+1 times abs(N2-N1)+1

// part of the full convolution result

CvMat* conv = cvCreateMat(A->rows + B->rows - 1, A->cols + B->cols - 1,

A->type);

// initialize A and B

int dftgM = cvGetOptimalDFTSize(A->rows + B->rows - 1);

int dftgN = cvGetOptimalDFTSize(A->cols + B->cols - 1);

CvMat* dftgA = cvCreateMat(dft\_M, dft\_N, A->type);

CvMat* dftgB = cvCreateMat(dft\_M, dft\_N, B->type);

CvMat tmp;

// copy A to dftgA and pad dft\_A with zeros

Trang 40

cvGetSubRect(dftgA, &tmp, cvRect(0,0,A->cols,A->rows));

cvCopy(A, &tmp);

cvGetSubRect(dftgA, &tmp, cvRect(A->cols,0,dft\_A->cols - A->cols,A->rows));

cvZero(&tmp);

// no need to pad bottom part of dftgA with zeros because of

// use nonzerogrows parameter in cvDFT() call below

cvDFT(dftgA, dft\_A, CV\_DXT\_FORWARD, A->rows);

// repeat the same with the second array

cvGetSubRect(dftgB, &tmp, cvRect(0,0,B->cols,B->rows));

cvCopy(B, &tmp);

cvGetSubRect(dftgB, &tmp, cvRect(B->cols,0,dft\_B->cols - B->cols,B->rows));

cvZero(&tmp);

// no need to pad bottom part of dftgB with zeros because of

// use nonzerogrows parameter in cvDFT() call below

cvDFT(dftgB, dft\_B, CV\_DXT\_FORWARD, B->rows);

cvMulSpectrums(dftgA, dft\_B, dft\_A, 0 /* or CV\_DXT\_MUL\_CONJ to get

correlation rather than convolution */);

cvDFT(dftgA, dft\_A, CV\_DXT\_INV\_SCALE, conv->rows); // calculate only

// the top part

cvGetSubRect(dftgA, &tmp, cvRect(0,0,conv->cols,conv->rows));

cvCopy(&tmp, conv);

cvDecRefData

Decrements một mảng tham chiếu dữ liệu truy cập

void cvDecRefData(CvArr* arr);

arr con trỏ đến một mảng tiêu đề

Decrements Hàm truy cập dữ liệu tham chiếu trong một CvMat hoặc CvMatND nếu các tài liệu tham khảo con trỏ truy cập không phải là NULL Nếu truy cập đạt đến số không, dữ liệu được deallocated Trong hiện tại truy cập thực hiện các tài liệu tham khảo không phải là NULL chỉ khi dữ liệu đã được phân bổ bằng cách sử dụng các cvCreateData Hàm Truy cập sẽ được NULL trong các trường hợp khác như: dữ liệu bên ngoài đã được giao cho tiêu đề bằng cách

sử dụng cvSetData, các tiêu đề ma trận là một phần của một ma trận lớn hơn hoặc hình ảnh , hoặc tiêu đề được chuyển đổi từ một hình ảnh hoặc tiêu đề ma trận n-chiều

cvDet

Trả về yếu tố quyết định của một ma trận

double cvDet(const CvArr* mat);

mat Các ma trận nguồn

Hàm trả về yếu tố quyết định của mat ma trận vuông Các phương pháp trực tiếp được sử dụng cho ma trận nhỏ và loại bỏ Gaussian được sử dụng cho ma trận lớn hơn Đối với đối xứng tích cực xác định các ma trận, nó cũng có thể chạy cvSVD với U = V = 0 và sau đó tính toán yếu tố quyết định là một sản phẩm của các yếu tố đường chéo của W

cvDiv

Performs per-element division of two arrays

void cvDiv(const CvArr* src1,

Ngày đăng: 01/09/2015, 18:16

HÌNH ẢNH LIÊN QUAN

2.3  Hình ảnh hỗn hợp biến đổi ………………………………………………………………… - biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv
2.3 Hình ảnh hỗn hợp biến đổi ………………………………………………………………… (Trang 19)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w