IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1) - thesis-23-08-10

Download Report

Transcript IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1) - thesis-23-08-10

Đại học Khoa học Tự nhiên, ĐHQG-HCM
Khoa Công Nghệ Thông Tin
Các thao tác cơ bản
với OpenCV
ThS. Trần Minh Triết
1
Các thao tác cơ bản với Image
Hàm tạo Image (nội dung rỗng)
IplImage* cvCreateImage(CvSize size, int depth, int channels);
Ví dụ:
IplImage* img = cvCreateImage ( cvGetSize (imgsrc), 8, 1 );
IplImage* img = cvCreateImage ( cvSize (width, height), 8, 3 );
IplImage* img = cvCreateImage ( size, IPL_DEPTH_8U,
bIsColor ? 3 : 1 )
Lưu ý: cần phải tạo Image trước khi sử dụng.
2
Các thao tác cơ bản với Image
Các hằng số độ sâu màu:
IPL_DEPTH_8U (unsigned char),
IPL_DEPTH_8S (signed char),
IPL_DEPTH_16S (short int),
IPL_DEPTH_32S (int),
IPL_DEPTH_32F (float).
#define
#define
#define
#define
#define
#define
#define
#define
IPL_DEPTH_SIGN
IPL_DEPTH_1U
IPL_DEPTH_8U
IPL_DEPTH_16U
IPL_DEPTH_32F
IPL_DEPTH_8S
IPL_DEPTH_16S
IPL_DEPTH_32S
0x80000000
1
8
16
32
(IPL_DEPTH_SIGN | 8)
(IPL_DEPTH_SIGN |16)
(IPL_DEPTH_SIGN |32)
3
Các thao tác cơ bản với Image
Hàm đọc ảnh từ file
IplImage* cvvLoadImage (string strPathname);
Hàm sao chép ảnh
void
cvCopyImage (IplImage* src, IplImage* dst);
IplImage* cvCloneImage( const IplImage* image );
Hủy đối tượng ảnh (bắt buộc gọi sau khi dùng xong)
void cvReleaseImage ( IplImage** image )
Chọn kênh màu quan tâm (Channel Of Interest - COI)
void cvSetImageCOI ( IplImage* image, int coi );
Chọn vùng (hình chữ nhật) cần xử lý trên ảnh (Region of
Interest – ROI)
void cvSetImageROI ( IplImage* image, CvRect rect );
4
Các thao tác cơ bản với Image
Các hàm chọn kênh màu để xử lý
Chọn kênh màu:
void cvSetImageCOI( IplImage* image, int coi );
Nếu coi = 0 thì chọn tất cả kênh màu
Nếu coi > 0 thì chọn kênh màu thứ coi
Lấy kênh màu được chọn:
int cvGetImageCOI( const IplImage* image );
5
Các thao tác cơ bản với Image
Các hàm chọn vùng để xử lý (region of interest – ROI)
Chọn vùng (hình chữ nhật) để xử lý:
void cvSetImageROI( IplImage* image, CvRect rect );
Lấy vùng (hình chữ nhật) đang được chọn:
CvRect cvGetImageROI( const IplImage* image );
Hủy bỏ việc chọn vùng đang xử lý (tức là xử lý trên toàn
bộ ảnh)
void cvResetImageROI( IplImage* image );
6
Tạo cửa sổ và hiển thị ảnh
Tạo cửa sổ:
cvvNamedWindow (char* strWindowName, int flag);
Ghi chú: tên cửa sổ strWindowName dùng để phân
biệt các cửa sổ hiển thị ảnh. Đây chính là tiêu đề của
cửa sổ tương ứng
Flag nếu là số lẻ thì hiển thị đúng kích thước ảnh
Hiển thị ảnh trên cửa sổ (do OpenCV tạo ra)
cvvShowImage (char* strWindowName, IlpImage* img);
Ảnh img sẽ hiển thị trên cửa sổ
strWindowName đã được tạo ra trước đó
có
tên
7
Tạo cửa sổ và hiển thị ảnh
Ví dụ: hiển thị ảnh img trên cửa sổ có tiêu đề là Main
Window
cvvNamedWindow (“Main Window”, 1);
cvvShowImage (“Main Window”, img);
8
Hiển thị ảnh
Hàm hiển thị ảnh trên HDC bất kỳ
CvvImage::Show(HDC hDC, int x, int y, int width, int height);
Ví dụ: giả sử có sẵn ảnh img (kiểu IplImage*)
CClientDC dc(this);
CvvImage imgObj;
imgObj.CopyOf(img);
imgObj.Show(dc.GetSafeHdc(),
0, 0, imgObj.Width(), imgObj.Height());
9
Các hệ màu
Các hệ màu màu thông dụng
BGR
RGB
GRAY
HSV
BGRA
RGBA
BGR555
BGR565
Số kênh
3
3
1
3
4
4
3
3
Kênh 1
Kênh 2
Kênh 3
Kênh 4
Blue
Green
Red
Red
Green
Blue
Hue
Saturation
Value
Blue
Green
Red
Alpha
Red
Green
Blue
Alpha
Blue
Green
Red
Blue
Green
Red
Gray
10
Chuyển đổi kênh màu
Hàm chuyển đổi hệ màu:
void cvCvtColor( IplImage* src, IplImage* dst, int code)
Hằng số code quy định cách chuyển đổi có dạng:
CV_<HệMàuNguồn>2<HệMàuĐích>
Ví dụ: các hằng số quy định cách chuyển đổi hệ màu
thường dùng
CV_BGR2HSV
CV_RGB2GRAY
CV_HSV2BGR
11
Chuyển đổi kênh màu
Lưu ý: cần phải tạo ra đối tượng dst có kích thước phù
hợp với src, độ sâu màu và số kênh màu phù hợp với
mục đích của thao tác chuyển đổi hệ màu trước khi sử
dụng hàm cvCvtColor
Ví dụ: chuẩn bị dst cho thao tác chuyển đổi sang hệ màu
HSV (3 kênh màu)
dst = cvCreateImage( cvGetSize(src), 8, 3);
Ví dụ: chuẩn bị dst cho thao tác chuyển đổi sang ảnh
mức xám (1 kênh màu)
dst = cvCreateImage( cvGetSize(src), 8, 1);
12
Chuyển đổi kênh màu
Ví dụ: chuyển đổi từ ảnh nguồn src (BGR) sang ảnh đích
dst (HSV)
IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3);
cvCvtColor( src, hsv, CV_BGR2HSV );
Ví dụ: chuyển đổi từ ảnh nguồn src (BGR) sang ảnh đích
dst (RGB)
IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3);
cvCvtColor( src, hsv, CV_BGR2RGB );
Ví dụ: chuyển đổi từ ảnh nguồn src (BGR) sang ảnh đích
dst (mức xám)
IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1);
cvCvtColor( src, hsv, CV_BGR2GRAY );
13
Tách các kênh màu
Hàm tách kênh màu:
cvCvtPixToPlane ( IplImage* src,
IplImage* img1, IplImage* img2,
IplImage* img3, IplImage* img4);
Ý nghĩa của từng kênh màu được tách ra tùy thuộc hệ
màu của ảnh gốc
14
Tách các kênh màu
Ví dụ: Tách các kênh màu của ảnh src (hệ màu BGR)
IplImage* r_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* g_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* b_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
cvCvtPixToPlane ( src, b_plane, g_plane, r_plane, NULL );
Ví dụ: Tách các kênh màu của ảnh src (hệ màu RGB)
IplImage* r_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* g_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* b_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
cvCvtPixToPlane ( src, r_plane, g_plane, b_plane, NULL );
15
Tách các kênh màu
Ví dụ: Tách các kênh màu của ảnh src (hệ màu HSI)
IplImage* h_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* s_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* i_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
cvCvtPixToPlane ( src, h_plane, s_plane, i_plane, NULL );
Ví dụ: Tách các kênh màu của ảnh src (hệ màu BGRA)
IplImage* b_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* g_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* r_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
IplImage* a_plane = cvCreateImage ( cvGetSize(src), 8, 1 );
cvCvtPixToPlane ( src, b_plane, g_plane, r_plane, a_plane);
16
Trộn các kênh màu
Hàm trộn các kênh màu thành 1 ảnh mới
void cvCvtPlaneToPix
( const CvArr* src0, const CvArr* src1,
const CvArr* src2, const CvArr* src3,
CvArr* dst );
Sử dụng tối đa 4 kênh màu
Cần tạo ảnh mới có kích thước, độ sâu màu và số kênh
màu phù hợp trước khi thực hiện việc trộn kênh màu
17
Các hằng số quy định kiểu chuyển đổi màu
#define CV_BGR2BGRA
#define CV_RGB2RGBA
0
CV_BGR2BGRA
#define CV_BGRA2BGR
#define CV_RGBA2RGB
1
CV_BGRA2BGR
#define CV_BGR2RGBA
#define CV_RGB2BGRA
2
CV_BGR2RGBA
#define CV_RGBA2BGR
#define CV_BGRA2RGB
3
CV_RGBA2BGR
#define CV_BGR2RGB
#define CV_RGB2BGR
#define CV_BGRA2RGBA
#define CV_RGBA2BGRA
4
CV_BGR2RGB
5
CV_BGRA2RGBA
18
Các hằng số quy định kiểu chuyển đổi màu
#define
#define
#define
#define
#define
#define
#define
#define
CV_BGR2GRAY
CV_RGB2GRAY
CV_GRAY2BGR
CV_GRAY2RGB
CV_GRAY2BGRA
CV_GRAY2RGBA
CV_BGRA2GRAY
CV_RGBA2GRAY
6
7
8
CV_GRAY2BGR
9
CV_GRAY2BGRA
10
11
#define
#define
#define
#define
#define
#define
#define
#define
CV_BGR2BGR565 12
CV_RGB2BGR565 13
CV_BGR5652BGR 14
CV_BGR5652RGB 15
CV_BGRA2BGR565 16
CV_RGBA2BGR565 17
CV_BGR5652BGRA 18
CV_BGR5652RGBA 19
19
Các hằng số quy định kiểu chuyển đổi màu
#define CV_GRAY2BGR565 20
#define CV_BGR5652GRAY 21
#define
#define
#define
#define
#define
#define
#define
#define
CV_BGR2BGR555 22
CV_RGB2BGR555 23
CV_BGR5552BGR 24
CV_BGR5552RGB 25
CV_BGRA2BGR555 26
CV_RGBA2BGR555 27
CV_BGR5552BGRA 28
CV_BGR5552RGBA 29
20
Các hằng số quy định kiểu chuyển đổi màu
#define CV_GRAY2BGR555 30
#define CV_BGR5552GRAY 31
#define
#define
#define
#define
CV_BGR2XYZ
CV_RGB2XYZ
CV_XYZ2BGR
CV_XYZ2RGB
32
33
34
35
#define
#define
#define
#define
CV_BGR2YCrCb
CV_RGB2YCrCb
CV_YCrCb2BGR
CV_YCrCb2RGB
36
37
38
39
21
Các hằng số quy định kiểu chuyển đổi màu
#define CV_BGR2HSV
#define CV_RGB2HSV
#define CV_BGR2Lab
#define CV_RGB2Lab
40
41
44
45
#define
#define
#define
#define
CV_BayerBG2BGR
CV_BayerGB2BGR
CV_BayerRG2BGR
CV_BayerGR2BGR
46
47
48
49
#define
#define
#define
#define
CV_BayerBG2RGB
CV_BayerGB2RGB
CV_BayerRG2RGB
CV_BayerGR2RGB
CV_BayerRG2BGR
CV_BayerGR2BGR
CV_BayerBG2BGR
CV_BayerGB2BGR
22
Các hằng số quy định kiểu chuyển đổi màu
#define
#define
#define
#define
CV_BGR2Luv
CV_RGB2Luv
CV_BGR2HLS
CV_RGB2HLS
50
51
52
53
#define CV_HSV2BGR
#define CV_HSV2RGB
54
55
#define
#define
#define
#define
#define
#define
CV_Lab2BGR
CV_Lab2RGB
CV_Luv2BGR
CV_Luv2RGB
CV_HLS2BGR
CV_HLS2RGB
56
57
58
59
60
61
23