Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python

Trong hướng dẫn này, bạn sẽ học cách che dấu hình ảnh bằng OpenCV.

Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python

Hướng dẫn trước đây của tôi đã thảo luận về các hoạt động bitwise, một bộ kỹ thuật rất phổ biến được sử dụng rất nhiều trong xử lý hình ảnh.

Và như tôi đã gợi ý trước đây, chúng ta có thể sử dụng cả các hoạt động và mặt nạ bitwise để xây dựng các ROI không phải là gốc. Điều này cho phép chúng tôi trích xuất các vùng từ hình ảnh có hình dạng hoàn toàn tùy ý.

Đơn giản thôi; Một mặt nạ cho phép chúng ta chỉ tập trung vào các phần của hình ảnh mà chúng ta quan tâm.

Ví dụ, hãy để nói rằng chúng tôi đã xây dựng một hệ thống tầm nhìn máy tính để nhận ra khuôn mặt. Phần duy nhất của hình ảnh chúng tôi quan tâm đến việc tìm kiếm và mô tả là các phần của hình ảnh chứa khuôn mặt - chúng tôi chỉ đơn giản là không quan tâm đến phần còn lại của nội dung hình ảnh. Với điều kiện là chúng ta có thể tìm thấy các khuôn mặt trong hình ảnh, chúng ta có thể xây dựng một mặt nạ để chỉ hiển thị các khuôn mặt trong hình ảnh.Provided that we could find the faces in the image, we may construct a mask to show only the faces in the image.

Một ứng dụng mặt nạ khác mà bạn gặp phải là sự pha trộn và minh bạch alpha (ví dụ: trong hướng dẫn này về việc tạo GIF với openCV). Khi áp dụng tính minh bạch cho hình ảnh với OpenCV, chúng ta cần nói OpenCV những phần nào của độ trong suốt hình ảnh nên được áp dụng cho so với không - mặt nạ cho phép chúng ta tạo ra sự khác biệt đó.

Để tìm hiểu cách thực hiện mặt nạ hình ảnh với OpenCV, chỉ cần tiếp tục đọc.

Trong phần đầu tiên của hướng dẫn này, chúng tôi sẽ định cấu hình môi trường phát triển của chúng tôi và xem xét cấu trúc dự án của chúng tôi.

Sau đó, chúng tôi sẽ thực hiện một tập lệnh Python để che dấu hình ảnh với OpenCV.

Định cấu hình môi trường phát triển của bạn

Để làm theo hướng dẫn này, bạn cần cài đặt thư viện OpenCV trên hệ thống của bạn.

May mắn thay, OpenCV không thể cài đặt được:

$ pip install opencv-contrib-python

Nếu bạn cần trợ giúp định cấu hình môi trường phát triển của mình cho OpenCV, tôi khuyên bạn nên đọc hướng dẫn OpenCV cài đặt PIP của tôi - nó sẽ giúp bạn và chạy trong vài phút.pip install OpenCV guide — it will have you up and running in a matter of minutes.

Có vấn đề cấu hình môi trường phát triển của bạn?

Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python
Hình 1: Gặp khó khăn trong việc cấu hình môi trường phát triển của bạn? Bạn muốn truy cập vào các máy tính xách tay Jupyter được cấu hình sẵn chạy trên Google Colab? Hãy chắc chắn tham gia PyimageSearch Plus - bạn sẽ lên và chạy với hướng dẫn này trong vài phút.Having trouble configuring your development environment? Want access to pre-configured Jupyter Notebooks running on Google Colab? Be sure to join PyImageSearch Plus — you will be up and running with this tutorial in a matter of minutes.

Tất cả những gì đã nói, là bạn:

  • Ngắn gọn về thời gian?
  • Học trên hệ thống bị khóa hành chính của nhà tuyển dụng?
  • Muốn bỏ qua những rắc rối khi chiến đấu với dòng lệnh, người quản lý gói và môi trường ảo?
  • Sẵn sàng để chạy mã ngay bây giờ trên các hệ thống Windows, MacOS hoặc Linux của bạn?

Sau đó tham gia PyimageSearch Plus ngay hôm nay!

Có quyền truy cập vào các máy tính xách tay Jupyter cho hướng dẫn này và các hướng dẫn PyimageSearch khác được cấu hình sẵn để chạy trên hệ sinh thái Google Colab, ngay trong trình duyệt web của bạn! Không cần cài đặt. No installation required.

Và tốt nhất, những máy tính xách tay Jupyter này sẽ chạy trên Windows, MacOS và Linux!

Cấu trúc dự án

Thực hiện mặt nạ hình ảnh với OpenCV dễ dàng hơn bạn nghĩ. Nhưng trước khi chúng tôi viết bất kỳ mã nào, trước tiên hãy xem xét cấu trúc thư mục dự án của chúng tôi.

Bắt đầu bằng cách sử dụng phần Tải xuống của Hướng dẫn này trong hướng dẫn này để truy cập mã nguồn và hình ảnh ví dụ.“Downloads” section of this guide to access the source code and example image.

Thư mục dự án của bạn sẽ trông giống như sau:

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files

Tập lệnh opencv_masking.py của chúng tôi sẽ tải hình ảnh đầu vào adrian.png từ đĩa. Sau đó, chúng tôi sử dụng mặt nạ để trích xuất cả cơ thể và mặt từ hình ảnh bằng cách sử dụng mặt nạ hình chữ nhật và hình tròn tương ứng.

Thực hiện mặt nạ hình ảnh với OpenCV

Hãy cùng học cách áp dụng mặt nạ hình ảnh bằng OpenCV!

Mở tệp opencv_masking.py trong cấu trúc thư mục dự án của bạn và hãy để Lừa làm việc:

# import the necessary packages
import numpy as np
import argparse
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="adrian.png",
	help="path to the input image")
args = vars(ap.parse_args())

Dòng 2-4 Nhập các gói Python yêu cầu của chúng tôi. Sau đó, chúng tôi phân tích các đối số dòng lệnh của chúng tôi trên các dòng 7-10. import our required Python packages. We then parse our command line arguments on Lines 7-10.

Chúng ta chỉ cần một công tắc duy nhất ở đây, --image, đó là đường dẫn đến hình ảnh chúng ta muốn che dấu. Chúng tôi tiếp tục và mặc định đối số --image đối với tệp adrian.png trong thư mục dự án của chúng tôi.

Bây giờ hãy tải hình ảnh này từ đĩa và thực hiện mặt nạ:

# load the original input image and display it to our screen
image = cv2.imread(args["image"])
cv2.imshow("Original", image)

# a mask is the same size as our image, but has only two pixel
# values, 0 and 255 -- pixels with a value of 0 (background) are
# ignored in the original image while mask pixels with a value of
# 255 (foreground) are allowed to be kept
mask = np.zeros(image.shape[:2], dtype="uint8")
cv2.rectangle(mask, (0, 90), (290, 450), 255, -1)
cv2.imshow("Rectangular Mask", mask)

# apply our mask -- notice how only the person in the image is
# cropped out
masked = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask Applied to Image", masked)
cv2.waitKey(0)

Các dòng 13 và 14 Tải

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
2 ban đầu từ đĩa và hiển thị nó lên màn hình của chúng tôi: load the original
$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
2 from disk and display it to our screen:

Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python
Hình 2: Tải hình ảnh đầu vào của chúng tôi từ đĩa. Loading our input image from disk.

Sau đó, chúng tôi xây dựng một mảng numpy, chứa đầy số không, với cùng chiều rộng và chiều cao với hình ảnh gốc của chúng tôi trên dòng 20.Line 20.

Như tôi đã đề cập trong hướng dẫn trước đây của chúng tôi về cắt hình ảnh với OpenCV, chúng tôi có thể sử dụng các phương thức phát hiện đối tượng để tự động phát hiện các đối tượng/người trong hình ảnh. Tuy nhiên, chúng tôi sẽ sử dụng kiến ​​thức tiên nghiệm của chúng tôi về hình ảnh ví dụ của chúng tôi cho thời điểm hiện tại.

Chúng tôi biết rằng khu vực chúng tôi muốn trích xuất ở góc dưới bên trái hình ảnh. Dòng 21 vẽ một hình chữ nhật màu trắng trên mặt nạ của chúng tôi, tương ứng với khu vực chúng tôi muốn trích xuất từ ​​hình ảnh gốc của chúng tôi.Line 21 draws a white rectangle on our mask, which corresponds to the region we want to extract from our original image.

Bạn có nhớ xem xét chức năng

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
3 trong hướng dẫn hoạt động bitwise của chúng tôi không? Nó chỉ ra rằng chức năng này được sử dụng rộng rãi khi áp dụng mặt nạ vào hình ảnh.

Chúng tôi áp dụng mặt nạ của chúng tôi trên dòng 26 bằng hàm

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
3.Line 26 using the
$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
3 function.

Hai tham số đầu tiên là chính

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
2 (nghĩa là, hình ảnh mà chúng tôi muốn áp dụng thao tác bitwise).

Tuy nhiên, phần quan trọng của hàm này là từ khóa

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
6. Khi được cung cấp, hàm
$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
7 là
$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
8 khi các giá trị pixel của hình ảnh đầu vào bằng nhau và mặt nạ khác không ở mỗi (x, y) -Coordinate (trong trường hợp này, chỉ có pixel là một phần của hình chữ nhật màu trắng) .

Sau khi áp dụng mặt nạ của chúng tôi, chúng tôi hiển thị đầu ra trên các dòng 27 và 28, mà bạn có thể thấy trong Hình 3:Lines 27 and 28, which you can see in Figure 3:

Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python
Hình 3: Trái: Xây dựng mặt nạ hình chữ nhật. Phải: Áp dụng mặt nạ hình chữ nhật cho hình ảnh với OpenCV. Left: Constructing a rectangular mask. Right: Applying the rectangular mask to the image with OpenCV.

Sử dụng mặt nạ hình chữ nhật của chúng tôi, chúng tôi chỉ có thể trích xuất vùng của hình ảnh có chứa người đó và bỏ qua phần còn lại.

Chúng ta hãy nhìn vào một ví dụ khác, nhưng lần này bằng cách sử dụng mặt nạ không có gốc:

# now, let's make a circular mask with a radius of 100 pixels and
# apply the mask again
mask = np.zeros(image.shape[:2], dtype="uint8")
cv2.circle(mask, (145, 200), 100, 255, -1)
masked = cv2.bitwise_and(image, image, mask=mask)

# show the output images
cv2.imshow("Circular Mask", mask)
cv2.imshow("Mask Applied to Image", masked)
cv2.waitKey(0)

Trên dòng 32, chúng tôi khởi tạo lại

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
6 của chúng tôi để được lấp đầy bằng các số không và cùng kích thước như hình ảnh gốc của chúng tôi.Line 32, we re-initialize our
$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
6 to be filled with zeros and the same dimensions as our original image.

Sau đó, chúng tôi vẽ một vòng tròn màu trắng trên hình ảnh mặt nạ của chúng tôi, bắt đầu từ trung tâm của khuôn mặt tôi với bán kính

# import the necessary packages
import numpy as np
import argparse
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", type=str, default="adrian.png",
	help="path to the input image")
args = vars(ap.parse_args())
0 pixel.

Áp dụng mặt nạ tròn sau đó được thực hiện trên dòng 34, một lần nữa sử dụng hàm

$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
3.Line 34, again using the
$ tree . --dirsfirst
.
├── adrian.png
└── opencv_masking.py

0 directories, 2 files
3 function.

Kết quả của mặt nạ tròn của chúng tôi có thể được nhìn thấy trong Hình 4:Figure 4:

Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python
Hình 4: Trái: Tạo mặt nạ tròn. Phải: trích xuất khuôn mặt từ hình ảnh đầu vào bằng mặt nạ tròn thay vì hình chữ nhật. Left: Creating a circular mask. Right: Extracting the face from the input image using a circular mask instead of a rectangular one.

Ở đây, chúng ta có thể thấy rằng mặt nạ vòng tròn của chúng ta được hiển thị ở bên trái và ứng dụng của mặt nạ ở bên phải. Không giống như đầu ra từ Hình 3, khi chúng tôi trích xuất một vùng hình chữ nhật, lần này, chúng tôi đã trích xuất một vùng tròn tương ứng với khuôn mặt của tôi trong hình ảnh.Figure 3, when we extracted a rectangular region, this time, we have extracted a circular region that corresponds to only my face in the image.

Hơn nữa, chúng ta có thể sử dụng phương pháp này để trích xuất các vùng từ hình ảnh có hình dạng tùy ý (hình chữ nhật, vòng tròn, đường, đa giác, v.v.).

Kết quả mặt nạ hình ảnh openCV

Để thực hiện mặt nạ hình ảnh với OpenCV, hãy chắc chắn truy cập vào phần Tải xuống của Google trong hướng dẫn này để truy xuất mã nguồn và hình ảnh ví dụ.“Downloads” section of this tutorial to retrieve the source code and example image.

Từ đó, mở shell và thực hiện lệnh sau:

$ python opencv_masking.py

Đầu ra mặt nạ của bạn nên khớp với tôi từ phần trước.

Cái gì tiếp theo? Tôi đề nghị Đại học Pyimageearch.

Thông tin khóa học: 53+ Tổng số lớp • 57 giờ video hướng dẫn theo yêu cầu • Cập nhật lần cuối: Tháng 10 năm 2022
53+ total classes • 57+ hours of on-demand code walkthrough videos • Last updated: October 2022
★★★★★ 4.84 (128 Ratings) • 15,800+ Students Enrolled

Tôi tin tưởng mạnh mẽ rằng nếu bạn có một giáo viên phù hợp, bạn có thể làm chủ tầm nhìn máy tính và học sâu.

Bạn có nghĩ rằng việc học tầm nhìn máy tính và học tập sâu phải tốn thời gian, quá sức và phức tạp? Hoặc phải liên quan đến toán học và phương trình phức tạp? Hoặc yêu cầu bằng cấp về khoa học máy tính?

Đó không phải là trường hợp.

Tất cả những gì bạn cần để làm chủ tầm nhìn máy tính và học tập sâu là để ai đó giải thích mọi thứ với bạn bằng các thuật ngữ đơn giản, trực quan. Và đó chính xác là những gì tôi làm. Nhiệm vụ của tôi là thay đổi giáo dục và các chủ đề trí tuệ nhân tạo phức tạp được dạy như thế nào.

Nếu bạn nghiêm túc về việc học tầm nhìn máy tính, điểm dừng tiếp theo của bạn sẽ là Đại học Pyimageearch, tầm nhìn máy tính toàn diện nhất, học sâu và khóa học OpenCV trực tuyến ngày hôm nay. Tại đây, bạn sẽ học cách áp dụng thành công và tự tin tầm nhìn máy tính vào công việc, nghiên cứu và dự án của bạn. Tham gia với tôi trong Mastery Mastery Mastery.

Bên trong Đại học Pyimageearch, bạn sẽ tìm thấy:

  • ✓ Hơn 53 khóa học về tầm nhìn máy tính thiết yếu, học tập sâu và chủ đề OpenCV53+ courses on essential computer vision, deep learning, and OpenCV topics
  • ✓ 53+ Giấy chứng nhận hoàn thành53+ Certificates of Completion
  • ✓ Hơn 57 giờ video theo yêu cầu57+ hours of on-demand video
  • ✓ Các khóa học hoàn toàn mới được phát hành thường xuyên, đảm bảo bạn có thể theo kịp các kỹ thuật tiên tiếnBrand new courses released regularly, ensuring you can keep up with state-of-the-art techniques
  • ✓ Sổ tay Jupyter được cấu hình sẵn trong Google ColabPre-configured Jupyter Notebooks in Google Colab
  • ✓ Chạy tất cả các ví dụ mã trong trình duyệt web của bạn - hoạt động trên Windows, MacOS và Linux (không yêu cầu cấu hình môi trường Dev!)
  • ✓ Truy cập vào các repos mã tập trung cho tất cả hơn 450 hướng dẫn về pyimageearchcentralized code repos for all 450+ tutorials on PyImageSearch
  • ✓ Dễ dàng tải xuống một lần nhấp cho mã, bộ dữ liệu, mô hình được đào tạo trước, v.v. Easy one-click downloads for code, datasets, pre-trained models, etc.
  • ✓ Truy cập trên thiết bị di động, máy tính xách tay, máy tính để bàn, v.v.Access on mobile, laptop, desktop, etc.

Bấm vào đây để tham gia Đại học Pyimageearch

Bản tóm tắt

Trong hướng dẫn này, bạn đã học được những điều cơ bản về mặt nạ bằng OpenCV.

Điểm mấu chốt của mặt nạ là chúng cho phép chúng tôi chỉ tập trung tính toán vào các vùng của hình ảnh mà chúng tôi quan tâm. Tập trung tính toán của chúng tôi vào các khu vực quan tâm đến chúng tôi tác động đáng kể khi chúng tôi khám phá các chủ đề như học máy, phân loại hình ảnh và phát hiện đối tượng.

Ví dụ, hãy để cho rằng chúng tôi muốn xây dựng một hệ thống để phân loại các loài hoa.

Trong thực tế, có lẽ chúng ta chỉ quan tâm đến các cánh hoa màu và kết cấu để thực hiện phân loại. Nhưng vì chúng tôi đang chụp ảnh trong một môi trường tự nhiên, chúng tôi cũng sẽ có nhiều khu vực khác trong hình ảnh của chúng tôi, bao gồm bụi bẩn từ mặt đất, côn trùng và những bông hoa khác đang thu hút tầm nhìn. Làm thế nào chúng ta sẽ định lượng và phân loại chỉ là bông hoa mà chúng ta quan tâm? Như chúng tôi thấy, câu trả lời là mặt nạ.As we’ll see, the answer is masks.

Để tải xuống mã nguồn cho bài đăng này (và được thông báo khi các hướng dẫn trong tương lai được xuất bản tại đây trên PyimageSearch), chỉ cần nhập địa chỉ email của bạn trong biểu mẫu bên dưới!

Hướng dẫn how to create image mask in python - cách tạo mặt nạ hình ảnh trong python

Tải xuống mã nguồn và hướng dẫn tài nguyên 17 trang miễn phí

Nhập địa chỉ email của bạn dưới đây để nhận .Zip của mã và hướng dẫn tài nguyên 17 trang miễn phí về tầm nhìn máy tính, openCV và học sâu. Bên trong bạn sẽ tìm thấy các hướng dẫn, sách, khóa học và thư viện được chọn bằng tay của tôi để giúp bạn thành thạo CV và DL!FREE 17-page Resource Guide on Computer Vision, OpenCV, and Deep Learning. Inside you'll find my hand-picked tutorials, books, courses, and libraries to help you master CV and DL!

Làm cách nào để che dấu một hình ảnh trong Python?

Mặt nạ hình ảnh bằng Python Opencv..
Tạo một khung vẽ màu đen với cùng kích thước với hình ảnh và đặt tên nó như mặt nạ ..
Thay đổi các giá trị của mặt nạ bằng cách vẽ bất kỳ hình nào trong hình ảnh và cung cấp cho nó một màu trắng ..
Thực hiện thao tác thêm bitwise trên hình ảnh với mặt nạ ..

Làm thế nào để bạn tạo một mặt nạ trong Python?

Để tạo mặt nạ boolean từ một mảng, hãy sử dụng phương thức Ma.Make_make () trong Python Numpy.Hàm có thể chấp nhận bất kỳ chuỗi nào có thể chuyển đổi cho các số nguyên hoặc nomask.Không yêu cầu nội dung phải là 0 và 1, giá trị 0 được hiểu là sai, mọi thứ khác là đúng.use the ma. make_mask() method in Python Numpy. The function can accept any sequence that is convertible to integers, or nomask. Does not require that contents must be 0s and 1s, values of 0 are interpreted as False, everything else as True.

Làm cách nào để làm mặt nạ ảnh?

Mở một trình soạn thảo hình ảnh hỗ trợ các lớp.Mở ảnh mà bạn muốn áp dụng mặt nạ.Lưu tệp với một tên mới dưới dạng trùng lặp để bạn không vô tình ghi đè lên bản gốc.Tạo một lớp mới và sơn nó màu trắng rắn, và điều chỉnh độ trong suốt của lớp để bạn có thể nhìn thấy hình ảnh bên dưới.

Làm cách nào để che dấu một hình ảnh trong opencv?

Để đảo ngược mặt nạ trong OpenCV, chúng tôi sử dụng hàm cv2.bitwise_not (), thực hiện bitwise không hoạt động trên các pixel riêng lẻ.Tham số: Masked_image: Đó là hình ảnh được đảo ngược.use the cv2. bitwise_not() function, which performs bitwise not operation on individual pixels. Parameters: masked_image: It is the image that is to be inverted.