Xử lý ảnh với opencv

Do công việc, tôi đang bao gồm một thời hạn mày mò về OpenCV nhằm xử lý ảnh cùng video. Phần to những tác vụ tôi thực hiện là code OpenCV bên trên C++ cùng giao tiếp cùng với Android qua JNI. Và rồi tôi nhận biết tôi chỉ làm theo rất nhiều tutorial bao gồm sẵn trên mạng cùng mất không ít thời gian rộng nút quan trọng để fix bug của compiler hoặc IDE. Bản thân tôi khôn xiết bao gồm hứng thụ với Computer Vision với Image Processing nói bình thường, dẫu vậy biện pháp tiếp cận nlỗi bên trên có vẻ nlỗi vượt chậm rì rì. Sẽ giỏi rộng giả dụ hoàn toàn có thể triệu tập thế được phần đông quan niệm cơ bạn dạng cùa Computer Vision trước, không xẩy ra sa đà vào câu hỏi fix bug. Bản thân việc lập cập tạo thành đều áp dụng có ích là một trong những hễ lực không nhỏ dại đối với câu hỏi liên tiếp học tập Computer Vision & Image Processing.

You watching: Xử lý ảnh với opencv

Đó là nguyên nhân tôi gửi sang lập trình sẵn OpenCV với Python thả. Việc thiết lập, viết code, thí điểm đông đảo trlàm việc bắt buộc dễ dàng và đơn giản rộng tương đối nhiều.

Thêm một nguyên nhân nữa, cần nói là Computer Vision với Image Processing là phần đông nghành khó khăn trường hợp xét về tinh tế nghiên cứu, cùng với rất nhiều phương pháp tân oán. Tôi không nói rất nhiều công thức toán đó là không cần thiết, cơ mà là đối với tín đồ bắt đầu học, đã tốt rộng ví như lập cập chũm được toàn bộ các kỹ năng cơ bạn dạng cùng bắt đầu áp dụng thi công áp dụng hữu dụng cho chính mình. Sau đó, tuỳ theo nhu yếu và sở trường, có thể liên tục đào sâu phân tích, tối ưu, chạy thời hạn thực… Kể cả cơ hội kia, Khi vẫn gồm kiến thức và kỹ năng cơ phiên bản rồi, Việc tiếp cận đang càng nhanh khô hơn.

Xin lỗi vày phần reviews hơi dài mẫu :Phường Tôi xin bắt đầu luôn. Trong bài xích trước tiên này, tôi sẽ trình diễn cách thiết lập môi trường xung quanh và một vài tác vụ cơ bạn dạng Khi thao tác làm việc cùng với OpenCV bên trên Pydong dỏng. Bài viết này rất có thể sẽ khá cơ phiên bản với một số trong những fan hâm mộ, nhưng mà do là bài bác thứ nhất vào loạt bài bác này, tôi vấn mong mỏi trình diễn nhằm đảm bảo an toàn sự rất đầy đủ. Trong những bài xích sau, bọn họ sẽ cùng sản xuất đông đảo vận dụng thú vui rộng.

Cài đặt môi trường

Có số đông yếu tắc sau rất cần được setup để làm Việc cùng với OpenCV bên trên : * Pyeo hẹp 2.7 * NumPy cùng SciPy: Bằng bí quyết thực hiện NumPy, chúng ta cũng có thể biểu hiện hình ảnh bằng mảng đa chiều. Dường như, có rất nhiều thư viện cách xử trí hình họa và cả machine learning áp dụng phương pháp biểu hiện mảng của NumPy. NumPy cũng cung cấp rất nhiều hàm toán học tập chúng ta cũng có thể thực hiện nhiều phân tích gồm ý nghĩa hơn bên trên ảnh. Bên cạnh NumPy còn có SciPy kèm theo, cung ứng thêm về những tính toán thù công nghệ.

Trên Windows, phương pháp dễ nhất để có cả Pydong dỏng, NumPy cùng SciPy là thiết lập Enthought Canopy tại https://www.enthought.com/products/canopy/

Trên Mac trường đoản cú 10.7 trsống lên, NumPy và SciPy đã có thiết lập sẵn. * Matplotlib: là tlỗi viện để plot. khi giải pháp xử lý hình họa, chúng ta sẽ sử dụng thỏng viện này để xem histogram của hình họa hoặc xem chính ảnh kia. * OpenCV: Về lí giải cài đặt chi tiết, chúng ta có thể coi tại đây

Mlàm việc cùng lưu lại tệp tin ảnh

Hãy ban đầu bằng tác vụ đơn giản dễ dàng nhất: mở một file hình ảnh thành một mảng NumPy, hiểu những thông tin về form size, tiếp nối lưu lại mảng NumPy thành một tệp tin ảnh mới.

See more: Tìm Kiếm Bằng Giọng Nói Trên Youtube, Tìm Kiếm Bằng Giọng Nói


12345678910111213141516

import argparseimport cv2ap = argparse.ArgumentParser()ap.add_argument("-i", "--image", required = True, help = "Path to lớn the image")args = vars(ap.parse_args())image = cv2.imread(args<"image">)print "width: %d pixels" % (image.shape<1>)print "height: %d pixels" % (image.shape<0>)print "channels: %d channels" % (image.shape<2>)cv2.imshow("Image", image)cv2.imwrite("new.jpg", image)cv2.waitKey(0)

Đầu tiên, họ import nhì package quan trọng là argparse với cv2. argparse dùng để làm khai báo phần đông parameter cần thiết cho lịch trình của họ, ở chỗ này, bọn họ knhị báo parameter là băng thông mang đến file hình họa ban sơ. Để phát âm tệp tin hình họa thành một mảng NumPy, họ sử dụng hàm cv2.imread() cùng với parameter là tên gọi tệp tin hình ảnh (đã làm được nhập lệ trường đoản cú command line). Sau công đoạn này, ta nhận ra một mảng NumPy là image. Tiếp theo ta in ra những thông số kỹ thuật về file ảnh, gồm bao gồm chiều lâu năm, chiều rộng và số channel. Tại đây, họ gồm có điểm lưu ý về kiểu cách NumPy lưu giữ những thông số về bức ảnh: * Một bưc hình ảnh bao gồm 2 chiều X và Y, nơi bắt đầu toạ độ trên px bên trên cùng phía trái của bức ảnh. Chiều X từ trái sang trọng nên và chiều Y trường đoản cú trên xuống bên dưới. NumPy lưu số px tương đối ngược: image.shape<0> là số pixel theo hướng Y cùng image.shape<1> là số px theo hướng X. * Mỗi px bên trên bức ảnh được biểu lộ dưới 1 trong 2 dạng: grayscale hoặc color. image.shape<2> lưu giữ số channel bộc lộ từng px. Với ảnh màu hiện trên RGB, số channel là 3, còn với hình họa Black Trắng (grayscale), bọn họ chỉ có 1 channel duy nhất

Để hiển thị tấm hình trên một window new, ta thực hiện hàm cv2.imshow(), với 2 đối số là tên của window và tên của mảng NumPy ước ao hiển thị.

Để lưu lại mảng NumPy thành một file ảnh new, ta áp dụng hàm cv2.imwrite(), với 2 đối số là tên gọi của tệp tin ao ước lưu lại với thương hiệu của mảng NumPy. Trong ví dụ này, họ lưu lại tệp tin bắt đầu như nhau file cũ nhưng không có sửa đổi gì.

Chạy đoạn code bên trên như sau:
Ảnh gốc:

Kết quả trả về

12345678910111213141516171819202122

import numpy as npimport argparseimport cv2ap = argparse.ArgumentParser()ap.add_argument("-i", "--image", required = True, help = "Path lớn the image")args = vars(ap.parse_args())image = cv2.imread(args<"image">)cv2.imshow("Original", image)(cX, cY) = (image.shape<1> / 2 , image.shape<0>/2)radius = 120mask = np.zeros(image.shape<:2>, dtype = "uint8")cv2.circle(mask, (cX, cY), radius, 255, -1)masked = cv2.bitwise_and(image, image, mask = mask)avatar = masked< cY - radius : cY + radius, cX - radius : cX + radius>cv2.imshow("Mask", mask)cv2.imshow("Avatar", avatar)cv2.imwrite("avatar.jpg", avatar)cv2.waitKey(0)

Đoạn code bước đầu cùng với các thủ tục như import packages cần thiết, khai báo những parameters nguồn vào mang đến script, hiểu tệp tin hình họa vào mảng NumPgiống như phần bên trên.

Để crop một phần bức ảnh, chúng ta nên tạo nên một phương diện nạ mask, là 1 trong những mảng có size nhỏng tấm hình với toàn bộ quý hiếm pixel được khởi tạo bởi 0. Tiếp kia, ta vẽ một hình tròn trắng trên mảng ‘mask’ . Sau đó, thực hiện bitwise_and() nhị mảng image cùng nhau, tất cả thêm tđê mê số mặt nạ mask, ta được một bức ảnh masked chỉ gồm phần khuôn mặt. Tiếp tục crop bằng cách slice mảng NumPy, bọn họ được kết quả sau cùng là tấm hình avatar.

Chạy đoạn code bên trên nlỗi sau:
Kết quả:

Bức ảnh ban đầu

mask

*

avatar

*

Tất nhiên, tôi đã sử dụng tệp tin ảnh xuất hiện tổng thống Obama ngơi nghỉ ngay lập tức thân tnóng hình họa với mask được đặt tại tại chính giữa vai trung phong tấm hình. Không buộc phải hầu hết tấm ảnh hầu hết nhỏng vậy; trong ngôi trường thích hợp đó bọn họ đang áp dụng kinh nghiệm face detection. Nhưng chính là chủ thể của một bài viết sau.

See more: Nhãn Hiệu Tư Nhân ( Private Label Là Gì ? Đặc Điểm Private Label Là Gì

Kết luận

Qua nội dung bài viết này, tôi đã ra mắt đều bước bắt đầu để triển khai bài toán với OpenCV qua Pyeo hẹp. Bài viết hơi cơ bản, tuy nhiên vẫn trình diễn một vài quan niệm cơ bản để sẵn sàng cho đều ứng dụng lần sau. Hẹn chạm mặt lại các bạn trong các phần tiếp theo sau.


Chuyên mục: Chia sẻ