Hướng dẫn opencv roi mask python - opencv roi mask python

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

Nội phân Chính showShow

  • Định cấu hình môi trường phát triển của bạn
  • Có vấn đề cấu hình môi trường phát triển của bạn?
  • Cấu trúc dự án
  • Thực hiện mặt nạ hình ảnh với OpenCV
  • Kết quả mặt nạ hình ảnh openCV
  • Cái gì tiếp theo? Tôi đề nghị Đại học Pyimageearch.
  • Làm cách nào để che dấu một hình ảnh trong OpenCV Python?
  • Làm thế nào để bạn tạo một mặt nạ trong Python?
  • Làm thế nào để mặt nạ hoạt động trong opencv?
  • Làm thế nào để bạn đặt một mặt nạ trên một bức tranh?

Hướng dẫn opencv roi mask python - opencv roi mask 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 phân 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

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

Cấu trúc dự án

$ pip install opencv-contrib-python

Thực hiện mặt nạ hình ảnh với OpenCVpip 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?

Cấu trúc dự ánHaving 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.

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

  • Kết quả mặt nạ hình ảnh openCV
  • Cái gì tiếp theo? Tôi đề nghị Đại học Pyimageearch.
  • Làm cách nào để che dấu một hình ảnh trong OpenCV Python?
  • Làm thế nào để bạn tạo một mặt nạ trong Python?

Làm thế nào để mặt nạ hoạt động trong opencv?

Làm thế nào để bạn đặt một mặt nạ trên một bức tranh? No installation required.

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.

Cấu trúc dự án

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

Kết quả mặt nạ hình ảnh openCV“Downloads” section of this guide to access the source code and example image.

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

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

0 directories, 2 files

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

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

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

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

# 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())

Làm cách nào để che dấu một hình ảnh trong OpenCV Python? import our required Python packages. We then parse our command line arguments on Lines 7-10.

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

Làm thế nào để mặt nạ hoạt động trong opencv?

# 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)

Làm thế nào để bạn đặt một mặt nạ trên một bức tranh? 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 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. Loading our input image from disk.

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 ý.Line 20.

Đơ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.

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ì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ì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 9 năm 2022
53+ total classes • 57+ hours of on-demand code walkthrough videos • Last updated: Sept 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!

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!

Để 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.

Đảo ngược một mặt nạ về cơ bản đảo ngược toàn bộ quá trình, nghĩa là các pixel trong phần được tô sáng trở thành 0 và tất cả các pixel khác vẫn không khác. Với mục đích này, chúng tôi thực hiện bitwise không phải trên mỗi pixel để chuyển đổi (đảo ngược) giá trị của nó. Để đảo ngược mặt nạ trong OpenCV, chúng tôi sử dụng CV2.the pixels in the highlighted portion become 0 and all other pixels remain non-zero. For this purpose, we perform bitwise not on each pixel to transpose(invert) its value. To invert a mask in OpenCV, we use the cv2.