biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv
Trang 1TRƯỜ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 2Mụ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 32 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 4Vớ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 56 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 62 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 72 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 82 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 92 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 102 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 111 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 121 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 132 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 15Phầ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 16Phầ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 19Tà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 20Chươ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 21inline 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 22typedef 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 23type 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 24type 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 25typedef 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 26ID 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 28CvArr* 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 29cvAnd
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 30mask 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 31scale * [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 32float 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 33const 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 34src 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 35Hà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 36cvCreateImageHeader
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 38CV_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 39nonzeroRows 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 40cvGetSubRect(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,