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. Show
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ì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:
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ự ánThự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 Thực hiện mặt nạ hình ảnh với OpenCVHãy cùng học cách áp dụng mặt nạ hình ảnh bằng OpenCV! Mở tệp # 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, 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 files2 from disk and display it to our screen: 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 files3 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 files3.Line 26 using the $ tree . --dirsfirst . ├── adrian.png └── opencv_masking.py 0 directories, 2 files3 function. Hai tham số đầu tiên là chính $ tree . --dirsfirst . ├── adrian.png └── opencv_masking.py 0 directories, 2 files2 (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 files6. Khi được cung cấp, hàm $ tree . --dirsfirst . ├── adrian.png └── opencv_masking.py 0 directories, 2 files7 là $ tree . --dirsfirst . ├── adrian.png └── opencv_masking.py 0 directories, 2 files8 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ì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 files6 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 files6 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 files3.Line 34, again using the $ tree . --dirsfirst . ├── adrian.png └── opencv_masking.py 0 directories, 2 files3 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ì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 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:
Bấm vào đây để tham gia Đại học Pyimageearch Bản tóm tắtTrong 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! 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. |