ĐẠI HỌC ĐÀ NẴNG - ĐẠI HỌC BÁCH KHOA
KHOA: CÔNG NGHỆ THÔNG TIN
O0O
BÁO CÁO
THỰC HÀNH XỬ LÝ ẢNH SỐ
Giáo viên hướng dẫn : Ts. Huỳnh Hữu Hưng
Sinh viên thực hiện : Võ Tá Hải
Lớp : 10T1LT.H2
Huế, tháng 03, năm 2012
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 2 Mục Lục
I. HƯỚNG DẪN CÀI ĐẶT OPENCV. 3
1. Giới thiệu chung về thư viện OpenCV. 3
2. Hướng dẫn cài đặt OpenCV 2.1 với Visual Studio 2008 3
3. Cấu hình Visual Studio 2008 liên kết với OpenCV. 8
4. Tạo một project sử dụng OpenCV. 10
II. SỬ DỤNG MỘT SỐ HÀM CƠ BẢN CỦA OPENCV. 12
1. Tải ảnh, hiển thị lại. 12
2. Chuyển ảnh sang ảnh Gray, hiển thị. 12
3. Chuyển ảnh Gray sang ảnh nhị phân, hiển thị. 13
4. Tách các kênh màu cvSplitPan, hiển thị. 14
sau:
Hình 1.
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 4
Nhấn Next, cửa sổ tiếp theo sẽ hiển thị:
Hình 2.
Đọc các điều khoản, đồng ý click vào I Agree, Cancel nếu không đồng ý và hủy bỏ
cài đặt. Chọn Iagree, cửa sổ tiếp theo sẽ hiển thị.
Hình 3.
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 5
Ở đây chọn Add OpenCV to the system PATH for all users và tiếp tục click vào
Next.
Hình 4.
Chọn đường dẫn cài đặt cho chương trình, mặc định sẽ là C:\OpenCV2.1. Nhần
Next để tiếp tục.
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 6
Hình 5.
Tiếp tục Next
Hình 6.
Ở đây chọn full để chương trình cài đặt toàn bộ thư viện. Sau đó click vào Install để
tiến hành cài đặt.
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 7
Sau một khoản thời gian cài đặt:
cvaux210d.lib cxcore210d.lib cxts210d.lib cvhaartraining.lib highgui210d.lib ml210d.lib
opencv_ffmpeg210d.lib.
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 11
Hình 13.
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 12
II. SỬ DỤNG MỘT SỐ HÀM CƠ BẢN CỦA OPENCV.
1. Tải ảnh, hiển thị lại.
//Tai anh len
IplImage *im_rgb=cvLoadImage(" /Images/tahai.jpg");
/*Hien thi anh goc*/
cvShowImage("Anh Goc ", im_rgb);
Kết quả khi chạy chương trình:
Hình 14.
2. Chuyển ảnh sang ảnh Gray, hiển thị.
//Doi sang anh Gray
IplImage *im_gray=cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);
//Hien thi anh Gray
cvShowImage("Anh Gray",im_gray);
Kết quả khi chạy chương trình:
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 13
Hình 15.
Hình 19.
5. Phát hiện biên bằng các phương pháp đã học, hiển thị.
IplImage* out = cvCreateImage( cvSize(im_gray->width/2,im_gray->height/2),
im_gray->depth, im_gray->nChannels);
// Reduce the image by 2
cvPyrDown( im_gray, out );
// Perform canny edge detection
cvCanny( out, out, 10, 100, 3 );
// Hien thi anh
cvShowImage("Lay Bien", out);
Kết quả khi chạy chương trình:
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 16
Hình 20.
6. Lọc ảnh(blur,gauss,median), hiển thị.
IplImage* Filter_BLUR = cvCreateImage( cvGetSize(im_rgb), IPL_DEPTH_8U, 3
);
IplImage* Filter_GAUSSIAN = cvCreateImage( cvGetSize(im_rgb), IPL_DEPTH_8U,
3 );
IplImage* Filter_MEDIAN = cvCreateImage( cvGetSize(im_rgb), IPL_DEPTH_8U, 3
);
cvSmooth( im_rgb, Filter_BLUR, CV_BLUR, 7, 7 );
cvSmooth( im_rgb, Filter_GAUSSIAN, CV_GAUSSIAN, 7, 7 );
cvSmooth( im_rgb, Filter_MEDIAN, CV_MEDIAN, 7, 7 );
//Hien thi anh
cvShowImage("Filter BLUR",Filter_BLUR);
cvShowImage("Filter GAUSSIAN",Filter_GAUSSIAN);
cvShowImage("Filter MEDIAN",Filter_MEDIAN);
Kết quả khi chạy chương trình:
cvSplit( im_rgb, r, g, b, NULL );
IplImage* s = cvCreateImage( cvGetSize(im_rgb), IPL_DEPTH_8U, 1 );
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 19 // Add equally weighted rgb values
cvAddWeighted( r, 1./3., g, 1./3., 0.0, s );
cvAddWeighted( s, 2./3., b, 1./3., 0.0, s );
// Truncate values over 100
cvThreshold( s, CatNguong, 100, 100, CV_THRESH_TRUNC );
//Hien thi
cvShowImage("Cat nguong",CatNguong);
Kết quả khi chạy chương trình:
Hình 26.
9. Tìm hiểu hàm phát hiện khuôn mặt trong OpenCV.
A. Phát hiện khuôn mặt trong hình ảnh.
Trong OpenCV đã có sẵn file “haarcascade_frontalface_alt.xml”, chúng ta chỉ
việc lấy nó ra và sử dụng. Khi lấy file này ra thì chúng ta phải chỉ đường dẫn cho thật
chính xác.
Ví dụ: tôi cài OpenCV 2.1 trên ổ C nên đường dẫn file
“haarcascade_frontalface_alt.xml” sẽ là:
"C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt.xml”.
//nhận dạng mặt trong ảnh
pFaceRectSeq = cvHaarDetectObjects(
pInpImg,
pCascade,
pStorage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize(0,0));
//tạo sửa sổ để hiển thị hình ảnh
cvNamedWindow("Nhan dien khuon mat trong hinh anh",CV_WINDOW_AUTOSIZE);
//vẽ hình chữ nhật xung quanh khuôn mặt
for (i=0;i<(pFaceRectSeq ? pFaceRectSeq->total:0);i++)
{
CvRect * r = (CvRect*)cvGetSeqElem(pFaceRectSeq,i);
CvPoint pt1 = {r->x,r->y};
CvPoint pt2 = {r->x + r->width,r->y + r->height};
cvRectangle(pInpImg,pt1,pt2,CV_RGB(255,0,0),3,4,0);
}
//hiển thị nhận diện
cvShowImage("Nhan dien khuon mat trong hinh anh",pInpImg);
cvWaitKey(0);
cvDestroyAllWindows();
//giải phòng bộ nhớ
cvReleaseImage(&pInpImg);
CvHaarClassifierCascade* cascade;
CvMemStorage* storage;
CvSeq* faces;
storage=cvCreateMemStorage(0);
//Load du lieu tu file XML
cascade =
(CvHaarClassifierCascade*)cvLoad("C:/OpenCV2.1/data/haarcascades/haarcascade_fr
ontalface_alt.xml",NULL, NULL, NULL);
Báo cáo: Thực hành Xử Lý Ảnh Số GVHD: Ts. Huỳnh Hữu Hưng
SVTH: Võ Tá Hải. Lớp: 10T1LT.H2 Trang: 22
faces = cvHaarDetectObjects( image, cascade, storage, 1.2,
2,0,cvSize(0,0));
for(int i=0;i<(faces ? faces->total:0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem(faces, i );
CvPoint pt1 = { r->x, r->y };
CvPoint pt2 = { r->x + r->width, r->y + r->height };
cvRectangle( image, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
}
//Hien thi cua so nhan dang khuon mat
if(image != 0)
cvShowImage("NHAN DIEN KHUON MAT", image);
c = cvWaitKey(10);
if(c == 27)
break;
}
cvWaitKey(0);
cvDestroyAllWindows();