Tải bản đầy đủ (.docx) (101 trang)

Xử lý ảnh với Python và Opencv

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.15 MB, 101 trang )

--------

Trường Đại Học Công Nghiệp Hà Nội
Khoa Công Nghệ Thông Tin
--------

Báo cáo thực tập tốt nghiệp
Đề tài:Xử lý ảnh với OpenCV và Python
Sinh viên thực hiện : Đỗ Xuân Sơn
Lớp: KHMT2-K10
Giáo viên hướng dẫn :TS.Ngô Đức Vĩnh


Mở Đầu
I.Lý Do Chọn Đề Tài

Xã hội ngày càng phát triển thì công nghệ cũng càng ngày càng phát
triển theo từ các cuộc cách mạng công nghiệp đầu tiên đến bây giờ là cuộc
cách mạng công ngiệp 4.0 . Là cuộc cách mạng mà cốt lõi là công nghệ
thông tin với các thiết bị thông minh như robot hay xe tự lái để tăng năng
suất lao động và phục vụ cho các nhu cầu đời sống con người nhưng vấn
đề gặp phải chung ở đây đối với các thiết bị này là chúng vẫn còn rất ngây
ngô so để chúng có trở nên thực sự thông minh thì con người phải dạy cho
chúng hiểu và phân được các sự vật trong thực tế nhằm đưa ra các bài toán
xử lý chính xác nhằm đạt được mục đích công việc từ đó đã phát triển nên
khái niệm Image Processing . Qua quá trình phát triển thì các lập trình viên
đã phát triển các thư viện hỗ trợ hay còn gọi là OpenCV cho quá trình xử lý
ảnh. Nhờ đó mà khi xử lý ảnh chúng ta không cần phải xây dựng lại các
hàm xử lý ảnh mà chỉ cần phát triển dựa trên những gì sẵn có . Do vậy
nhiều người chỉ biết đến xử lý ảnh với OpenCV . Nhưng hiện tại Python
cũng đã phát triển các thư viện dành riêng cho xử lý ảnh . Thế nên trong đề


tài này em muốn đưa ra sự được ưu điểm nhược điểm khi xử lý ảnh với
Python so với thư viện OpenCV vốn đã rất quen thuộc với hầu hết các lập
trình viên trong lĩnh vực xử lý ảnh

2


II.Mục Tiêu Nghiên Cứu
Tìm ra được các ưu điểm và nhược khi xử lý ảnh với python và
OpenCV để từ đó giúp người sử dụng khi nào nên xử dụng các thư viện
của python để xử lý ảnh khi nào nên xử dụng OpenCV để xử lý ảnh nhằm
đem lại hiệu quả tối đa cũng như sự khoa học trong công việc xử lý ảnh

III.Phương Pháp Nghiên Cứu
Tìm hiểu về một số kĩ thuật trong xử lý ảnh và một số modul thường
được sử dụng để hiểu về các thuật toán và mô hình cho xử lý ảnh một cách
tổng quát nhất
Tìm hiểu về OpenCV để trả lời cho những câu hỏi OpenCV là gì tại
sao phải dùng OpenCV ,Ai dùng OpenCV, Các Cấu Trúc Tập Lệnh trong
OpenCV , OpenCV
Hỗ trợ người dùng như thế nào trong xử lý ảnh
Tương tư với Python
Sau đó rút ra nhận xét về ưu nhược điểm khi xử lý ảnh với OpenCV và
PyThon

IV. Đối tượng nghiên cứu
Open CV và python

3



CHƯƠNG I: TỔNG QUAN VỀ XỬ LÝ ẢNH
1.1.Tổng Quan Về Lĩnh Vực Nghiên Cứu
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một
ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ
phát triển của nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng,
đặc biệt là máy tính chuyên dụng riêng cho nó.
Xử lý ảnh được đưa vào giảng dạy ở bậc đại học ở nước ta khoảng
chục năm nay. Nó là môn học liên quan đến nhiều lĩnh vực và cần nhiều
kiến thức cơ sở khác. Đầu tiên phải kể đến Xử lý tín hiệu số là một môn
học hết sức cơ bản cho xử lý tín hiệu chung, các khái niệm về tích chập,
các biến đổi Fourier, biến đổi Laplace, các bộ lọc hữu hạn… Thứ hai, các
công cụ toán như Đại số tuyến tính, Sác xuất, thống kê. Một số kiến thứ
cần thiết như Trí tuệ nhân tao, Mạng nơ ron nhân tạo cũng được đề cập
trong quá trình phân tích và nhận dạng ảnh.
Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng chính: nâng cao
chất lượng ảnh và phân tích ảnh. Ứng dụng đầu tiên được biết đến là nâng
cao chất lượng ảnh báo được truyền qua cáp từ Luân đôn đến New York từ
những năm 1920. Vấn đề nâng cao chất lượng ảnh có liên quan tới phân bố
mức sáng và độ phân giải của ảnh. Việc nâng cao chất lượng ảnh được phát
triển vào khoảng những năm 1955. Điều này có thể giải thích được vì sau
thế chiến thứ hai, máy tính phát triển nhanh tạo điều kiện cho quá trình xử
lý ảnh sô thuận lợi. Năm 1964, máy tính đã có khả năng xử lý và nâng cao
chất lượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ bao gồm: làm nổi
đường biên, lưu ảnh. Từ năm 1964 đến nay, các phương tiện xử lý, nâng
cao chất lượng, nhận dạng ảnh phát triển không ngừng. Các phương pháp
tri thức nhân tạo như mạng nơ ron nhân tạo, các thuật toán xử lý hiện đại và
cải tiến, các công cụ nén ảnh ngày càng được áp dụng rộng rãi và thu nhiều
kết quả khả quan.
Để dễ tưởng tượng, xét các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự

nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera,
máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại
Camera ống kiểu CCIR). Gần đây, với sự phát triển của công nghệ, ảnh
màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực
tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. (Máy ảnh số hiện nay là
một thí dụ gần gũi). Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể
quét từ ảnh chụp bằng máy quét ảnh. Hình 1.1 dưới đây mô tả các bước cơ
bản trong xử lý
4


1.2.Một số phép xử lý ảnh
1.2.1.Biến đổi ảnh xám(Grayscale convert)
Biến đổi ảnh xám là quá trình chuyển từ ảnh màu vể ảnh xám

Trong xử lý ảnh, việc chuyển đổi ảnh màu sang ảnh xám là công việc vô
cùng phổ biến.
Ảnh màu thực chất chỉ là tập hợp của những ma trận số có cùng kích
thước . Khi muốn xử lý thông tin trên ảnh, sẽ dễ dàng hơn nếu ta chỉ xử lý
dữ liệu trên một ma trận số thay vì nhiều ma trận số. Việc biến đổi ảnh màu
về ảnh số (Grayscale converting) xuất hiện vì mục đích trên - biến đổi
thông tin ảnh về một ma trận số hai chiều duy nhất.

5


Giả sử, hình ảnh của bạn được lưu trữ dưới dạng RGB (Red-Green-Blue).
Điều này có nghĩa bạn có ba ma trận xám tương ứng cho màu Red, Green,
Blue. Công việc của bạn là tìm cách tổng hợp ba ma trận này về thành một
ma trận duy nhất. Một trong số các công thức phổ biến để thực hiện việc đó


Y
=
0.2126R
+
0.7152G
+
0.0722B
Trong đó:


Y: ma trận xám cần tìm



R: ma trận xám đỏ của ảnh



G: ma trận xám lục của ảnh



B: ma trận xám lam của ảnh
Nếu bạn chưa quen về việc thực hiện phép toán trên ma trận, hãy hình dung
Y, R, G, B là giá trị mức xám trên các ô có tọa độ giống nhau.
1.2.2.Biến đổi ảnh đen trắng
Từ ảnh xám, bạn có thể biến đổi về thành ảnh chỉ có hai màu đen-trắng
(black-and-white)
Ảnh đen trắng thường được ứng dụng trong bài toán phân vùng ảnh (Image

segmentation). Giả sử trong hình ví dụ trên, bằng cách biến đổi ảnh về nhị
phân, bạn có thể loại bỏ các thông khung cảnh xung quanh và chỉ giữ lại
hai con cá heo trên hình

6


Ảnh đen trắng, như tên gọi, chỉ có hai màu đen với giá trị là 0 và trắng với
giá trị 255. Bài toán đặt ra là làm thế nào để biến đổi ảnh xám (hay nói cách
khác là một ma trận 2 chiều với giá trị mỗi ô trong khoảng 0-255) về thành
một ma trận 2 chiều với giá trị mỗi ô là 0 hoặc 255.
Cách giải quyết là chọn một ngưỡng (threshold) để xác định đâu là điểm
ảnh đen và đâu là điểm ảnh trắng. Nếu giá trị trên ảnh xám lớn hơn ngưỡng
threshold, đấy là điểm ảnh trắng và ngược lại.
Gọi ảnh xám là Gray, ảnh đen trắng cần xác định là BW, tọa độ các pixel
trên hình là (x,y), ta có
- BW(x,y) = 255 nếu Gray(x,y) > threshold
- BW(x,y) = 0 nếu Gray(x,y) <= threshold.

1.2.3.Biểu đồ phân bố tần số (Histogram)


Biểu đồ phân bố tần số (Biểu đồ phân bố mật độ, biểu đồ cột) dùng để đo
tần số xuất hiện của một vấn đề nào đó, cho ta thấy rõ hình ảnh sự thay đổi,
biến động của một tập dữ liệu. Đây là một khái niệm rất phổ biến, được sử
dụng rộng rãi từ lĩnh vực kỹ thuật tới kinh tế.

7







Trong xử lý ảnh, biểu đồ Histogram của một ảnh là biểu đồ mô tả sự phân
bố của các giá trị mức xám của các điểm ảnh (Pixel) trong một bức ảnh
hoặc một vùng ảnh(Region).
Trong một ảnh, giá trị của một điểm ảnh (Pixel) thường là từ 0-255.

Phân tích


Trục tung (Oy) biểu diễn số lượng điểm ảnh (Pixel) của mức xám.



Trục hoành (Ox) biểu diễn mức xám.



Giá trị lớn nhất của trục hoành chính là số lượng điểm ảnh (Pixel) có
trong một bức ảnh.



Với ảnh màu như RGB thì có tới 3 biểu đồ Histogram thể hiện từng kênh
màu.




Một biều đồ tốt à biểu đồ có số lượng điểm ảnh nhiều nhất ở vùng giữa
(Độ sáng trung bình) và ít dần ra 2 vùng sáng tối (Ngọn núi).
Tác dụng





Dựa vào biều đồ Histogram mà bạn có thể biết được hình ảnh sáng tối
như thế nào.
Áp dụng cho các xử lý ảnh cao cấp khác.

8


1.2.4.Tăng tương phản
Ảnh số là tập hợp các điểm mỗi điểm có giá trị độ sáng khác nhau . Ở đây
độ sáng để mắt người dễ cảm nhận ảnh song không phải quyết định .Thực
tế chỉ ra rằng 2 đối tượng có cùng độ sáng nhưng đặt trên 2 nền khác nhau
sẽ cho cảm nhận khác nhau .Như vậy độ tương phản biểu diễn sự thay đổi
độ sáng của đối tượng so với nền .Nói 1 cách khác, độ tương phản là độ nổi
của điểm ảnh hay vùng ảnh so với nền .Như vậy , nếu ảnh có độ tương
phản kém ta có thể tùy chỉnh theo ý muốn
Ảnh có độ tương phản kém là do điều kiện ánh sáng không đủ hay không
đều hoặc do tính không tuyến tính hay biến động nhỏ của bộ cảm nhận
ảnh , cần điều chỉnh lại biên độ trên toàn dải hay trên dải có giới hạn bằng
cách đổi tuyến tính biên độ đầu vào (dùng hàm biến đổi tuyến tính ) hay
phi tuyến (hàm mũ hay hàm logarit ).Khi dùng hàm tuyến tính các độ dốc
phải chọn lớn hơn 1 trong các miền cần co dãn.Các tham số a và b
(các cận ) có thể chọn khi xem xét lược đồ xám của ảnh .


9


Dãn độ tương phản

1.2.5.Khử nhiễu
Tách nhiễu là trường hợp đặc biệt của dãn độ tương phản khi hệ số góc
. Tách nhiễu được ứng dụng có hiệu quả để giảm nhiễu khi biết tín
hiệu vào trên khoảng [a,b]
Phân ngưỡng là trường hợp đặc biệt của tách nhiễu khi a=b=const.Trong
trường hợp này ảnh đầu vào ảnh nhị phân (có 2 mức ).Phân ngưỡng
thường dùng trong kỹ thuật in ảnh 2 màu vì ảnh gần nhị phân không cho
ảnh nhị phân khi quét ảnh do có nhiễu từ bộ cảm biến và biến đổi của nền
ví dụ trường hợp lọc nhiễu của ảnh vân tay.

10


Khử nhiễu

1.2.6.Co giãn ảnh
A,Giãn ảnh
Giãn ảnh nhằm mục đích loại bỏ điểm đen vây bởi các điểm trắng. Trong
kỹ thuật này , một cửa sổ (N+1)x(N+1) được rê đi khắp ảnh và thực hiện
đối sánh 1 pixel của ảnh với (N+1)2-1 điểm lân cận (không tính điểm ở tâm
).Phép đối sánh được thực hiện bởi phép tuyển logic .Thuật toán biến đổi
được tóm tắt như sau:

B,Co ảnh

Co ảnh là thao tác đối ngẫu ảnh nhằm loại bỏ điểm trắng bị vây bởi các
điểm đen .Trong kỹ thuật này , một cửa sổ (N+1)2 được rê đi khắp ảnh và
thực hiện so sánh pixel của ảnh (N+1)2-1 điểm lân cận .Việc so sánh ở đây
được thực hiện bởi phép hội logic .
Kỹ thuật này thường được áp dụng cho ảnh nhị phân như vân tay ,chữ viết
.Để không làm ảnh hưởng đến kích thước đối tượng trong ảnh ngưởì ta tiến
hành n lần dãn là n lần co

1.2.7.Xoay ảnh
Xoay ảnh là toán tử xoay vòng thực hiện phép biến đổi hình học để
ánh xạ vị trí
vào một vị trí

của một phần tử hình ảnh trong một hình ảnh đầu vào
trong một hình ảnh đầu ra bằng cách xoay nó qua góc

do người dùng chỉ định về nguồn gốc
11

. Trong hầu hết các triển khai, các


vị trí đầu ra
nằm ngoài ranh giới của hình ảnh sẽ bị bỏ qua. Xoay
được sử dụng phổ biến nhất để cải thiện hình ảnh trực quan của một hình
ảnh, mặc dù nó có thể hữu ích như một bộ tiền xử lý trong các ứng dụng
mà các toán tử định hướng có liên quan. Rotation là một trường hợp đặc
biệt của sự biến đổi affine .
Toán tử xoay vòng thực hiện phép biến đổi của biểu mẫu:


nơi
là tọa độ của trung tâm luân chuyển (trong hình ảnh đầu vào)
và là góc quay với phép quay chiều kim đồng hồ có góc dương. (Lưu ý ở
đây rằng chúng ta đang làm việc trong tọa độ hình ảnh, do đó trục y đi
xuống. Công thức xoay tương tự có thể được định nghĩa khi trục y đi lên.)
Thậm chí nhiều hơn toán tử dịch , thao tác xoay tạo ra các vị trí đầu
ra
không phù hợp trong ranh giới của hình ảnh (được xác định bởi
kích thước của hình ảnh đầu vào gốc). Trong những trường hợp như vậy,
các phần tử đích đã được ánh xạ bên ngoài hình ảnh bị bỏ qua bởi hầu hết
các triển khai. Các vị trí pixel trong đó một hình ảnh đã được xoay thường
được lấp đầy bằng các pixel đen.
Thuật toán xoay, không giống như thuật toán được sử dụng bởi bản dịch ,
có thể tạo ra các tọa độ
không phải là số nguyên. Để tạo ra cường
độ của các điểm ảnh ở từng vị trí số nguyên, các phương pháp chẩn đoán
khác nhau (hoặc các kỹ thuật lấy mẫu lại ) có thể được sử dụng, ví dụ, hai
phương pháp phổ biến bao gồm:


Cho phép mức độ cường độ tại mỗi vị trí pixel nguyên để giả định giá trị
của hàng xóm không phải số nguyên gần nhất
.



Tính mức độ cường độ tại mỗi vị trí pixel nguyên dựa trên mức trung bình
có trọng số của n giá trị không phải nguyên gần nhất. Trọng số tỷ lệ thuận
với khoảng cách hoặc pixel chồng chéo của các phép chiếu gần đó.
Phương pháp thứ hai tạo ra kết quả tốt hơn nhưng làm tăng thời gian tính

toán của thuật toán.

12


1.2.8.Dò Biên
Điểm biên Là một điểm ảnh được coi là điểm biên nếu có sự thay đổi
nhanh hoặc đột ngột về mức xám (hoặc màu). Ví dụ trong ảnh nhị phân
,điểm đen gọi là điểm biên nếu điểm lân cân nó có ít nhất một điểm trắng .
Đường biên (đường bao ): tập hợp các điểm biên liên tiếp tạo thành một
đường biên hay đường bao
Ý nghĩa của đường biên trong xử lý ảnh :đường biên là một loại đặc trưng
cục bộ tiêu biểu trong phân tích , nhận dạng ảnh .Người ta sử dụng biên
làm phân tách các vùng xám (màu) cách biệt .Ngược lại người ta sử dụng
các vùng ảnh để tìm đường phân cách
Các kỹ thuật phát hiện biên chia làm 2 loại :
a.Phương pháp phát hiện biên trực tiếp : phương pháp này chủ yếu dựa vào
sự biến thiên độ sáng của điểm ảnh để làm nổi biên bằng kỹ thuật đạo hàm
+ Nếu lấy đạo hàm bậc nhất của ảnh: ta có phương pháp Gradient
+Nếu lấy đạo hàm bậc hai: ta có phương pháp Laplace
2 phương pháp này gọi là dò biên cục bộ
Ngoài ra người ta còn sử dụng phương pháp “ đi theo đường bao ” dựa vào
công cụ toán học là nguyên lý quy hoạch động và đường gọi là phương
pháp dò biên tổng thể .Phương pháp dò biên trực tiếp có hiệu quả và ít bị
tác động của nhiễu
13


b.Phương pháp phát hiện biên gián tiếp : Việc xác định biên của ảnh được
thực hiện từ ảnh đã phân vùng .Phương pháp dò biên gián tiếp khó cài đặt

nhưng áp dụng tốt khi sự biến thiên độ sáng nhỏ

1.2.9.Tìm xương đối tượng trong ảnh (Skeletons).
Tìm khung xương cũng tương tự như làm mảnh, nhưng nó được
dùng để tìm ra các chi tiết cấu trúc của đối tượng. Khung xương của
đối tượng là tập hợp các điểm ảnh cách đều biên của đối tượng. Và
có thể biểu diễn bằng phép co nhị phân và phép mở ảnh.
Xét A là một ảnh nhị phân bao gồm các điểm ảnh thuộc đối
tượng, được đặt nhãn là các số 1. Các điểm ảnh không thuộc đối
tượng được đặt nhãn là các số 0. B là phần tử cấu trúc 3x3. Khi đó,
nếu ký hiệu S(A) là khung xương của tập hợp A thì thuật toán tìm
khung xương được xác định qua công thức:
(1.1)
Trong đó :

( 1.2)

(A ⊖ kB) là phép co k lần liên tiếp trên A. Tức là:
(A ⊖ kB )=((..( A ⊖ B)…) ⊖ B ….)⊖ B

Và K là Bước lặp cuối cùng trước khi A bị ăn mòn thành tập rỗng.
Nói cách khác:

Công thức (1.1) và (1.2) khẳng định rằng khung xương S(A) có
thể nhận được từ hợp các bộ khung xương con Sk(A). Có thể chứng
14


minh rằng A có thể xây dựng lại từ các tập con này bằng cách sử
dụng công thức:


Trong đó

ký hiệu k lần giãn nhị phân Sk(A), tức là:

=((..( Sk(A) ⊕B)…)B ….)⊕B.

Xét thí dụ:

1.3. Một số mô hình trong xử lý ảnh
1.3.1. Mô hình Raster
Đây là cách biểu diễn ảnh thông dụng nhất hiện nay, ảnh được biểu
diễn dưới dạng ma trận các điểm (điểm ảnh). Thường thu nhận qua các
thiết bị như camera, scanner. Tuỳ theo yêu cầu thực thế mà mỗi điểm ảnh
được biểu diễn qua 1 hay nhiều bít
15


Mô hình Raster thuận lợi cho hiển thị và in ấn. Ngày nay công nghệ phần
cứng cung cấp những thiết bị thu nhận ảnh Raster phù hợp với tốc độ
nhanh và chất lượng cao cho cả đầu vào và đầu ra. Một thuận lợi cho việc
hiển thị trong môi trường Windows là Microsoft đưa ra khuôn dạng ảnh
DIB (Device Independent Bitmap) làm trung gian. Hình 1.4 thể hình quy
trình chung để hiển thị ảnh Raster thông qua DIB.
Một trong những hướng nghiên cứu cơ bản trên mô hình biểu diễn
này là kỹ thuật nén ảnh các kỹ thuật nén ảnh lại chia ra theo 2 khuynh
hướng là nén bảo toàn và không bảo toàn thông tin nén bảo toàn có khả
năng phục hồi hoàn toàn dữ liệu ban đầu còn nếu không bảo toàn chỉ có
khả năng phục hồi độ sai số cho phép nào đó. Theo cách tiếp cận này người
ta đã đề ra nhiều quy cách khác nhau như BMP, TIF, GIF, PCX… Hiện nay

trên thế giới có trên 50 khuôn dạng ảnh thông dụng bao gồm cả trong đó
các kỹ thuật nén có khả năng phục hồi dữ liệu 100% và nén có khả năng
phục hồi với độ sai số nhận được.

Quá trình hiển thị và chỉnh sửa , lưu trữ ảnh thông qua DIB
1.3.2. Mô hình Vector
Biểu diễn ảnh ngoài mục đích tiết kiệm không gian lưu trữ dễ dàng
cho hiển thị và in ấn còn đảm bảo dễ dàng trong lựa chọn sao chép di
chuyển tìm kiếm… Theo những yêu cầu này kỹ thuật biểu diễn vector tỏ ra
ưu việt hơn
Trong mô hình vector người ta sử dụng hướng giữa các vector của
điểm ảnh lân cận để mã hoá và tái tạo hình ảnh ban đầu ảnh vector được
thu nhận trực tiếp từ các thiết bị số hoá như Digital hoặc được chuyển đổi
từ ảnh Raster thông qua các chương trình số hoá
Công nghệ phần cứng cung cấp những thiết bị xử lý với tốc độ nhanh
và chất lượng cho cả đầu vào và ra nhưng lại chỉ hỗ trợ cho ảnh Raster.

16


Do vậy, những nghiên cứu về biểu diễn vectơ đều tập trung từ
chuyển đổi từ ảnh Raster.

Sự chuyển đổi giữa các mô hình biểu diễn ảnh

CHƯƠNG 2: Xử Lý Ảnh Với OpenCV
2.1.OpenCV
OpenCV là gì:
OpenCV [OpenCV] là open source (xem )
computer vision library có sẵn ở

Thư viện này được viết
trong C và C++ và chạy dưới Linux, Windows và Mac OS X. Có phát triển
tích cực trên các giao diện cho Python, Ruby, Matlab, và các ngôn ngữ
khác.
OpenCV được thiết kế cho hiệu quả tính toán và với tập trung mạnh cho
các ứng dụng thời gian thực. OpenCV được viết trong optimized C và có
thể có các thuận lợi của các multicore processor. Nếu bạn quan tâm tối ưu
tự động xa hơn trên kiến trúc Intel [Intel], bạn có thể mua các thư viện
Integrated Performance Primitives (IPP) [IPP] của Intel, mà gồm các hàm
tối ưu mức thấp trong nhiều lĩnh vực thuật toán khác nhau. OpenCV tự
động dùng IPP library thích hợp lúc chạy nếu thư viện được cài.
Một trong các mục đích của OpenCV là cung cấp một hạ tâng đơn giản đủ
dùng về computer vision mà giúp mọi người dựng các ứng dụng vision
phức tạp một cách nhanh chóng. OpenCV
library chứa trên 500 hàm mà trải ra nhiều lĩnh vực trong vision, gồm
factory product inspection, medical imaging, security, user interface,
camera calibration, stereo vision, và robotics. Vì computer vision và
17


machine learning thường đi chung, OpenCV cũng chứa Machine Learning
Library (MLL) đa mục đích chung.
Thư viện phụ này dc giới hạn về nhận diện mẫu thống kê và clustering.
MLL là cực kỳ hữu ích cho các nhiệm vụ vision mà ở lõi của nhiệm vụ của
OpenCV, nhưng nhìn chung nó được dùng cho bất kỳ vấn đề machine
learning.
Nguồn Gốc Của OpenCV( The Origin of OpenCV)
OpenCV phát triển từ một nghiên cứu Intel khởi xướng cho các ứng dụng
tận dụng CPU cao cấp. Hướng đến kết thúc này, Intel khai trương nhiều
projects gồm real-time ray tracing và 3D display walls. Một trong các tác

giả làm việc cho Intel ở thời điểm đó đang thăm các trường đại học và
thông báo rằng vài nhóm đại học đỉnh, chẳng hạn MIT Media Lab, có các
hạ tầng computer vision phát triển và mở nội bộ. Thay vì khám phá lại các
hàm cơ sở từ đầu, sinh viên mới có thể bắt đầu dựng ở đỉnh trên cơ sở
những những cái đã có.
Do đó, OpenCV được hiểu như một cách làm hạ tầng computer vision sẵn
có. Với hỗ trợ của Intel’s Performance Library Team,* OpenCV bắt đầu với
lõi của các tiên chuẩn mã và thuật toán được thực hiện được gửi đến các
thành viên của Intel’s Russian library team. Đây là “nơi” của OpenCV: nó
bắt đầu trong phòng thí nghiệm của Intel với công tác từ Soft ware
Performance Libraries group cùng nhau thực hiện và kinh nghiệm tối ưu ở
Russia.
Chủ chốt trong Russian team members là Vadim Pisarevsky, người quản lý,
mã, và tối ưu nhiều trong OpenCV và người vẫn ở trung tâm của nhiều
trong nỗ lực OpenCV. Cùng với anh, Victor Eruhimov hỗ trợ phát triển cấu
trúc ban đầu, và Valery Kuriakin điều hành Russian lab và hỗ trợ lớn cho
nỗ lực này. Có vài mục đích cho OpenCV ở lúc bắt đầu:
• Nghiên cứu vision cao cấp bởi cung cấp không chỉ mở mà còn mã tối ưu
cho kiến trúc vision cơ bản.
• Phổ biến kiến thức vision bởi cung cấp hạ tầng chung mà các developer
có thể dựng, sao cho code sẽ dễ đọc và khả chuyển nhiều hơn.

18


• Các ứng dụng thương mại dựa trên vision cao cấp bởi mã khả chuyển,
thực hiện tối ưu sẵn có miễn phí—với một bản quyền mà không đòi hỏi các
ứng dụng thương mại là mở hay miễn phí.
Nhưng mục tiêu này tạo thành “lý do” của OpenCV. Cho phép các ứng
dụng computer vision gia tăng nhu cầu cho các processor nhanh. Dẫn đến

nâng cấp các processor nhanh hơn mà tạo ra nhu cầu cho Intel mà bán các
extra software. Đó là lý do mã mở và miễn phí nảy lền từ một hardware
vendor hơn là một công ty software.
Ai dùng OpenCV
Hầu hết nhà khoa học và lập trình viên thực nghiệm computer biết về vài
khía cạnh của vai trò mà computer vision đóng. Nhưng vài mọi người biết
tất cả các cách mà computer vision được dùng. Ví dụ, hầu hết mọi người
biết gì đó về việc dùng của nó trong surveillance, và nhiều cũng biết rằng
nó đang được dùng rộng rãi cho ảnh và video trên Web. Một vài đã thấy
dùng một ít của computer vision trong các giao diện game. Nhưng ít người
người nhận ra hầu hết ảnh aerial và street-map (chẳng hạn trong Google’s
Street View) sử dụng nhiều kỹ thuật hiệu chỉnh camera và image stitching.
Vài nhận biết các ứng dụng niche trong giám sát an toàn, các phương tiện
bay unmanned, hay hay phân tích biomedical. Nhưng ít người biết cách
pervasive machine vision đã ở trong sản xuất: hầu như mọi thứ mà sản xuất
hàng loạt đã tự động kiểm tra ở mm điểm dùng computer vision.
Bản quyền open source cho OpenCV đã được cấu trúc mà bạn có thể dựng
một sản phẩm thương mại dùng tất cả hay một phần OpenCV. Bạn không
có nghĩa vụ phải opensource sản phẩm của bản hay return các cải tiến vào
public domain, mà ta hy vọng bạn sẽ. In part vì of những cái này liberal
licensing terms, có cộng đồng lớn người dùng mà bao gồm mọi người từ
các công ty lớn (IBM, Microsoft , Intel, SONY, Siemens, và Google, nêu
tên chỉ một vài) và các trung tâm nghiên cứu (chẳng hạn Stanford, MIT,
CMU, Cambridge, và INRIA). Có một Yahoo groups forum nơi người dùng
có thể gửi các câu hỏi và thảo luận ở
nó có khoảng 20,000 thành viên.
OpenCV là phổ biến trên toàn thế giới, với các cộng đồng người dùng lớn ở
China, Japan, Russia, Europe, và Israel.
Cài đặt OpenCV trên môi trường C++
19



Bước 1: Giải nén thư viện vào thư mục được định sẵn. Giả sử đường dẫn
của mã nguồn là C:\opencv

Bước 2: Tải và cài đặt CMake. Thư mục build chứa những tập tin của phần
mã nguồn được biên dịch sẵn. Phần sources được sử dụng cho cài đặt
manual.

Bước 3: Mở CMake. Trong phần Where is the source code sẽ trỏ đến thư
mục sources đã đề cập lúc trước. Phần Where to build the binaries là nơi
chứa phần thư viện được biên dịch. Trong ví dụ này đường dẫn
là C:\opencv\source\build.

20


Bước tiếp theo nhấn Configure, sau đó chọn bộ generator cho project, trong
phần này sẽ chọn tương ứng với IDE/Compiler mà mã nguồn mình sử
dụng. Đồng thời, nếu máy tính đang ở kiến trúc x86 thì chọn các phiên bản
IDE với tùy chọn là x86 (Ví dụ Visual Studio 14 2015). Đối với các máy
tính kiến trúc x64 thì chọn phiên bản có hậu tố là Win64. Nhấn Finish để
kết thúc cấu hình.
Sau khi configure xong thì danh sách các tùy chọn khi biên dịch để hiện ra
với rất nhiều tùy biến đi kèm. Phần này trong tutorial này sẽ bỏ qua vì mục
tiêu chỉ cần cài đặt bộ thư viện ở mức mặc định là thành công rồi. Nếu
không có gì thay đổi ta nhấn chọn Generate.
Sau khi quá trình phát sinh mã nguồn hoàn tất, trong thư mục build sẽ xuất
hiện các Project/Solution khác nhau.
Bước 4: Dùng Visual Studio để mở solution có tên là OPENCV. Lưu ý: khi

bản VS này phải trùng với bản VS đã configure trong cmake.

21


Quá trình biên dịch cần thực hiện qua 2 bước: (1) biên dịch thư viện cho
quá trình Debug và (2) biên dịch chương trình trong quá trình Release. Để
thực hiện các bước này đơn giản chỉ cần click chọn Target sẽ build rồi sau
đó nhấn F7 và ngồi đợi (Mất khoàng 10-15 phút cho quá trình biên dịch
trên Debug/Release). Kết quả trong quá trình biên dịch sẽ có khoảng 50
projects biên dịch thành công, 17 cái bị skip và 2 cái bị fail. Sau khi biên
dịch, ta sẽ có 2 thư mục cần quan tâm nằm trong build. Đó là thư mục lib
chứa toàn bộ dữ liệu cần thiết cho quá trình lập trình; thư mục là dữ liệu
cần thiết để chương trình sau khi build có thể chạy được.
Cấu hình Opencv trên Visual Studio
Bước 1: Tạo một Project (Empty Project).

22


Trước khi thực hiện tiếp các công việc cấu hình cho project. Ta cần xác
định rõ sẽ cần cấu hình những thông tin gì:
1.

2.
3.

Nơi chứa header file của OpenCV. Dĩ nhiên ta cần làm điều này để
include các đối tượng, hàm… của OpenCV.
Cấu hình các file cần thiết khi lập trình.

Cấu hình các file cần thiết cho quá trình thực thi. Bởi trong Visual Studio
có 2 target khi run bao gồm Debug và Release, nên ta cần phải cấu hình
riêng biệt cho mỗi target đó.
Cấu hình header file
Click chuột phải vào tên project (InstallOpencv) chọn Properties (Hoặc
nhấn Alt + F7).

23


Phía bên phần Sidebar chọn C/C++, General, mục Additional Include
Directories ta trỏ đến thư mục opencv\build\include (không
phải sources\build\include). Để đảm bảo ta có thể check bằng cách kiểm tra
xem thư mục include đó có các header file không. Xong nhấn OK.
Cấu hình thư viện cho quá trình lập trình
Nhấn Alt + F7 để vào phần Properties của Project. Chọn Thẻ Linker, mục
Additional Library Directories ta trỏ đến thư mục lib\Debug (trong ví dụ
này là: C:\oepncv\sources\build\lib\Debug). Vì đang cấu hình cho target là
Debug nên phần Configuration phải là Debug

24


Chuyển đến thẻ Input, mục Additional Dependencies ta nhập các file sau:
opencv_calib3d300d.lib
opencv_core300d.lib
opencv_features2d300d.lib
opencv_flann300d.lib
opencv_hal300d.lib
opencv_highgui300d.lib

opencv_imgcodecs300d.lib
opencv_imgproc300d.lib
opencv_ml300d.lib
opencv_objdetect300d.lib
opencv_photo300d.lib
opencv_shape300d.lib
opencv_stitching300d.lib
opencv_superres300d.lib
opencv_ts300d.lib
opencv_video300d.lib
opencv_videoio300d.lib
opencv_videostab300d.lib
Sau khi cấu hình xong, ta chuyển qua target là Release và thực hiện giống
hệt như vậy. Tuy nhiên đường dẫn lần này sẽ là sources\build\lib\Release.
Phần Additional Dependencies sẽ là:
opencv_calib3d300.lib
25


×