TÌM HIỂU MỘT SỐ THUẬT TOÁN VÀ XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ẢNH CƠ BẢN SỬ DỤNG OPENCV - Pdf 33

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN
Tel. (84-511) 736 949, Fax. (84-511) 842 771
Website: itf.ud.edu.vn, E-mail:

BÁO CÁO THỰC TẬP TỐT NGHIỆP
NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115

ĐỀ TÀI :
TÌM HIỂU MỘT SỐ THUẬT TOÁN VÀ XÂY DỰNG
CHƯƠNG TRÌNH XỬ LÝ ẢNH CƠ BẢN SỬ DỤNG OPENCV
SINH VIÊN : NGUYỄN NGỌC SANG
LỚP
: 08T2
ĐƠN VỊ
: TRUNG TÂM NGHIÊN CỨU
ĐIỆN TỬ - TIN HỌC- TỰ ĐỘNG HÓA
MIỀN TRUNG
CBHD
:

ĐÀ NẴNG, 02/2012


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

ii

c.
d.

Giới thiệu về đơn vị đến thực tập............................................................................1
Giới thiệu bối cảnh của đề tài. ................................................................................2
Mục đích và ý nghĩa.................................................................................................2
Giới thiệu những công việc được giao....................................................................2

CHƯƠNG 1.......................................................................................................4
GIỚI THIỆU VỀ OPENCV..............................................................................4
1.

2.

3.

Giới thiệu tổng quan................................................................................................4
1.1. Khái niệm...........................................................................................................4
1.2. Lịch sử phát triển...............................................................................................4
1.3. Ứng dụng ...........................................................................................................5
Hướng dẫn cài đặt....................................................................................................5
2.1. Chuẩn bị.............................................................................................................5
2.2. Cách thực hiện....................................................................................................5
Chương trình đầu tiên............................................................................................12
3.1. Chương trình ...................................................................................................12
3.2. Giải thích..........................................................................................................12
3.3. Kết quả ........................................................................................................13

CHƯƠNG 2.....................................................................................................14
LẬP TRÌNH VỚI OPENCV...........................................................................14

2.
3.
4.

Làm trơn ảnh(Smoothing).....................................................................................23
Phân ngưỡng (Threshold)......................................................................................24
Flood Fill................................................................................................................24
Image Pyramids.....................................................................................................25

SVTH : Nguyễn Ngọc Sang

iii


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

5.

Resize.....................................................................................................................25

CHƯƠNG 4.....................................................................................................26
TRIỂN KHAI CHƯƠNG TRÌNH DEMO......................................................26
1.
2.
3.
4.

Mô tả .....................................................................................................................26
Chức năng của chương trình .................................................................................26
Giao diện chính......................................................................................................26

Trung tâm Điện tử, Tin học,Tự động hóa Miền Trung được thành lập theo
Quyết định số: /VĐT-TC ngày 21/02/2012 của Viện trưởng Viện NC Điện tử, Tin
học, Tự động hoá. Trung tâm có các chức năng nhiệm vụ như sau:
-

Thực hiện nghiên cứu khoa học và công nghệ các vấn đề do thực tiễn đặt ra
trong lĩnh vực Điện tử, Tin học, Tự động hóa và chuyển giao các kết quả
nghiên cứu này vào thực tế sản xuất.

-

Thực hiện bảo trì, bảo dưỡng, sửa chữa, tư vấn kỹ thuật các thiết bị điện tử
chuyên dụng, các thiết bị tự động trong công nghiệp nói riêng và trong các
ngành kinh tế quốc dân nói chung.

-

Đào tạo phổ cập, đào tạo lại cho các đối tượng có nhu cầu và các cán bộ khoa
học kỹ thuật tại các doanh nghiệp về chuyên ngành Công nghệ thông tin và
Tự động hóa.
3) Biên chế
Trung tâm hiện có 05 Cán bộ nghiên cứu trong đó 01 Tiến sĩ Điện tử - Viễn
thông, 02 Thạc sĩ Tự động hóa, 01 Cử nhân Tin học, 01 Cử nhân Kinh tế
Ngoài ra để tận dụng tối đa nguồn lực trí tuệ, phát huy hiệu quả hoạt động
nghiên cứu, đào tạo và kinh doanh, Trung tâm còn mời một số cộng tác viên thường
xuyên: 05 TS là chuyên gia hàng đầu trong các lĩnh vực Điện tử, Tin học, Tự động
hoá trong khu vực Miền Trung và Tây Nguyên.
4) Diện tích làm việc:

1

• Cung cấp những kiến thức cơ bản về xử lý ảnh .
• Nâng cao chất lượng ảnh .
• Với kiến thức về OpenCV và xử lý ảnh tạo tiền đề cho quá trình xây dựng hệ
thống quản lý giám sát giao thông .

d. Giới thiệu những công việc được giao.
Với đề tài trên ta cần nghiên cứu:
• Tìm hiểu về OpenCV
• Tìm hiểu về xử lý ảnh trong OpenCV
• Tìm hiểu thuật toán xử lý ảnh về tăng cường độ phân giải ảnh


Xây dựng chương trình

2


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

Nội dung bài báo cáo được trình bày gồm các phần chính như sau:
MỞ ĐẦU
Chương 1: GIỚI THIỆU VỀ OPENCV
Chương 2: LẬP TRÌNH VỚI OPENCV
Chương 3: XỬ LÝ ẢNH TRONG OPENCV
Chương 4: TRIỂN KHAI CHƯƠNG TRÌNH DEMO
KẾT LUẬN

SVTH : Nguyễn Ngọc Sang

3

team.
Chủ chốt trong các nhóm người Nga là Vadim Pisarevsky, người quản lý, mã,
và tối ưu nhiều trong OpenCV và người có nỗ lực với 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 sự phát triển này. Mục đích cho OpenCV ở lúc bắt đầu:
• Phát triển mã nguồn không chỉ mở mà tối ưu ,Không phát triển lại cái đã có
trước
• Phổ biến kiến thức cho các thành viên, chương trình đọc dể hiểu và khả
chuyển
• 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” cho phép các ứng dụng 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 bán các extra software. Đó là lý do mã mở và miễn phí này lại phát
triển từ một công ty software.
Bây giờ có xấp xỉ hai triệu download của OpenCV, và số này tăng trung bình
26,000 downloads một tháng.User group bây giờ gần đến 20,000 members. OpenCV
nhận nhiều hợp tác bởi nhiều người dùng và trung tâm bên ngoài công ty. Ngày nay,
OpenCV là một lĩnh vực tích cực ở vài tổ chức, do mong muốn thấy nhiều cập
SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

5

nhâthtrong hiệu chỉnh nhiều camera, nhận biết độ sâu, các phương pháp trộn vision
với các laser range finder, và nhận biết mẫu tốt hơn cũng như nhiều hỗ trợ cho các
nhu cầu robot

SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

6

Giải nén

Sau khi giải nén xong ,t hay đổi giá trị biến “Path” trong máy tính của bạn
Click chuột phải vào máy tính chọn properties, sau đó chọn tab “advanced” và
click “Environment Variables”

SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

Chọn edit để thêm vào

SVTH : Nguyễn Ngọc Sang

7


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

Thêm vào Path Variable:
C:\opencv\opencv\build\x86\vc10\bin
C:\opencv\opencv\build\common\tbb\ia32\vc10


Thêm vào C:\opencv\opencv\build\x86\vc10\lib

Nhấp chuột vào dấu cộng chọn input ,chon additional Dependencies thêm vào có thư
viện
opencv_core243d.lib
opencv_imgproc243d.lib
opencv_highgui243d.lib
opencv_ml243d.lib
opencv_video243d.lib
opencv_features2d243d.lib
opencv_calib3d243d.lib
opencv_objdetect243d.lib
opencv_contrib243d.lib
opencv_legacy243d.lib
opencv_flann243d.lib

SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

Đã hoàn tất quá trình cài đặt

3. Chương trình đầu tiên
3.1.Chương trình
#include "stdafx.h"
#include <highgui.h>
#include <cv.h>
int main( ) {

Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

14

CHƯƠNG 2

LẬP TRÌNH VỚI OPENCV
1. Các kiểu dữ liệu trong OpenCV
OpenCV có vài data type cơ sở Bạn có thể xem xét chi tiết các structure mô tả
như sau (cũng như các structure khác) trong types_c.h header file, mà ở
.../OpenCV/core/include directory của cài cặt OpenCV.
Structure
Chứa
Represents
CvPoint
int x, y
Point in image
CvPoint2D32f
float x, y
Points in ℜ2
CvPoint3D32f

float x, y, z

Points in ℜ3

CvSize
CvRect

int width, height

Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

15

cvScalar(255,255,255)
);

1.1.OpenCV Iplimage

OpenCV lưu trữ hình ảnh như là một cấu trúc C, IplImage. IPL là viết tắt của
Thư viện xử lý hình ảnh. Các kiểu dữ liệu IplImage được định nghĩa trong CXCORE.
Ngoài dữ liệu pixel liệu, nó có chứa một số lĩnh vực mô tả, gọi chung là
Header Image. Chúng bao gồm
• Chiều rộng - chiều rộng hình ảnh theo pixel.
• Chiều cao – hình ảnh chiều cao tính bằng pixel.
• Chiều sâu - một trong những hằng số được xác định trước cho biết số bit cho
mỗi điểm ảnh trên một kênh
• nChannels - số lượng của các kênh dữ liệu (1-4). Mỗi kênh có chứa một
loại dữ liệu pixel.Ví dụ, hình ảnh RGB có ba kênh màu đỏ, màu xanh lá
cây, và cường độ màu xanh.

1.2.OpenCV Mat

Trong OpenCV không có vector , khái niệm của một matrix trong OpenCV
là có phần trừu tượng hơn khái niệm ta học trong lớp đại số tuyền tính. Về cụ thể,
các phần tử của một matrix tự chúng không là các số đơn giản. Do đó, matrix có
thể gồm các 32-bit floats (CV_32FC1), của các unsigned integer 8-bit triplets
(CV_8UC3), hay vô số các element khác. Một element của CvMat không cần
thiết là một số đơn. Có thể biểu diễn nhiều giá trị cho một entry đơn trong matrix
cho phép ta làm nhiều thứ như biểu diễn nhiều channel màu trong một RGB

union {
int cols;
int width;
};
} CvMat;
Phổ biến là dùng cvCreateMat(), nó là sự kết hợp của cvCreateMatHeader() và
cvCreateData(). cvCreateMatHeader() tạo CvMat không cấp memory cho data, trong
khi cvCreateData() handles cấp phát data. Đôi khi chỉ cvCreateMatHeader() được
đòi hỏi, một trong vì bạn đã cấp data cho vài nguyên nhân khác hay vì bạn chưa thực
sự cần cấp nó. Hàm thứ ba để dùng cvCloneMat(CvMat*), mà tạo matrix mới từ một
cái hiện có.Khi matrix không còn cần nữa, nó có thể được giải phóng bởi gọi
cvReleaseMat(CvMat**).

2. Đọc và ghi ảnh
Hình ảnh được lưu và hiển thị dễ dàng với OpenCV.Chương trình dưới đây
là để đọc một hình ảnh từ tập tin và viết nó như là một tập tin thứ hai, trong một định
dạng nén khác nhau .
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
int main(int argc, char** argv)
{
IplImage * pInpImg = 0;
// Load an image from file
pInpImg = cvLoadImage("my_image.jpg",
CV_LOAD_IMAGE_UNCHANGED);
if(!pInpImg)
{
fprintf(stderr, "failed to load input image\n");
return -1;

#include "cv.h"
#include "highgui.h"
int main(int argc, char ** argv)
{
CvCapture * pCapture = 0;
IplImage * pVideoFrame = 0;
int
i;
char
filename[50];
// Initialize video capture
pCapture = cvCaptureFromCAM( CV_CAP_ANY );
if( !pCapture )
{
fprintf(stderr, "failed to initialize video capture\n");
return -1;
}
// Capture three video frames and write them as files
for(i=0; i

Các hàm trong OpenCV cho phép ta tương tác với operating system, file
system, và hardware chẳng hạn cameras được thu vào gọi là HighGUI (mà viết tắt
cho “high-level graphical user interface”). HighGUI cho phép ta mở windows,
display các images, đọc và viết các file liên quan graphic (cả images và video), và
handle đơn giản mouse, pointer, và keyboard events.HighGUI library trong OpenCV
có thể được chia thành ba phần: phần hardware, phần file system, và phần GUI
• Phần hardware được liên quan chính với các camera. Trong hầu hết hệ điều
hành, sự tương tác với camera là phức tạp. HighGUI cho phép một cách dễ
dàng để query camera và nhận image cuối từ camera.
• Phần file system được liên quan chính với loading và saving images. Khả
năng của bộ thư viện này là nó cho phép ta đọc video dùng cùng các phương
thức ta sẽ dùng để đọc camera.
• Phần thứ ba của HighGUI là window system (or GUI). Library cung cấp các
functions đơn giản mà sẽ cho phép ta mở một window và đưa image vào
window đó. Nó cũng cho phép ta thao tác với các sự kiện chuột bàn phím .

4.2.Các hàm hiển thị
.4.2.1.

Load ảnh từ Disk

SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

19

Function: IplImage* cvLoadImage(const char* filename ,int iscolor =

const char* name : tên window cần di chuyển
b/ Đóng tấn cả các window và giải phóng bộ nhớ
void cvDestroyAllWindows( void );
c/ Hàm chờ cvWaitkey() : Hàm sẽ chờ cho tới khi có thao tác nhấn phím.
Ví dụ: while( 1 ) {if( cvWaitKey(100)==27 ) break;}
- Ví dụ trên là một vòng lặp vô tân dừng khi nhấn phím ESC. Mã số 27 ứng với
phím ESC trong
bản mã ASCII

4.3.Xử lý sự kiện

SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

20

Để xử lí thao tác chuột ta cần xây dựng một hàm callback đề OpenCv có thể
gọi về hệ thống khí có sự kiện chuột xảy ra.
Prototype hàm callback: void CvMouseCallback(int event,
int x,
int y,
int flags,
void* param);
Hàm này gồm năm thông số truyền vào:
• int event : lưu trữ xử kiện chuột là một trong các giá trị tương ứng trong bản
sau

Sự kiện

CV_EVENT_FLAG_RBUTTON
2
CV_EVENT_FLAG_MBUTTON
4
CV_EVENT_FLAG_CTRLKEY
8
CV_EVENT_FLAG_SHIFTKEY
16
CV_EVENT_FLAG_ALTKEY
32
Bảng sự kiện1
Vídụ: Nếu ta ấn Shift + left click thì flag sẽ được set giá trị là
CV_EVENT_FLAG_SHIFTKEY tương ứng với giá trị trong bản trên
• Truyền vào biến cần thao tác thuộc các kiểu IplImage, …
Hàm đăng kí callback: void cvSetMouseCallback(const char*window_name,
SVTH : Nguyễn Ngọc Sang


Đề tài : Tìm hiểu một số thuật toán và xây dựng chương trình cơ bản xử lý ảnh sử dụng OpenCV

21

CvMouseCallback on_mouse,
void* param);
const char* window : tên windon cần bắt sự kiện chuột.
CvMouseCallback on_mouse : hàm callback đã được xây dựng bên trên

5. Sliders, Trackbars, and Switches
Trong HighGUI, các slider được gọi trackbars : là một thanh trượt mà ứng với
môt vị trí của con trượt(slider) cho ta một giá trị của hệ thống.. Đây là vì ban đầu của

Các giá trị pixel cho mỗi kênh trong val [i].
Đối với màu xám hình ảnh, val [0] chứa độ sáng điểm ảnh. Ba giá trị khác
được thiết lập là 0.
SVTH : Nguyễn Ngọc Sang



Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status