Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?

Mặc dù mặt nạ là nhị phân, chúng có thể được áp dụng cho hình ảnh để lọc ra các pixel trong đó mặt nạ là

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
5.

Hàm

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
6 của Numpy là một cách linh hoạt để áp dụng mặt nạ. Nó có ba đối số:

np.where(condition, x, y)

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
7,
import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
8 và
import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
9 có thể là mảng hoặc giá trị đơn. Điều này cho phép bạn chuyển qua các giá trị hình ảnh gốc trong khi đặt các giá trị đeo mặt nạ thành 0.

Hãy thực hành áp dụng mặt nạ bằng cách chọn các pixel giống như xương từ tia X (

new_x = x[m.mask].copy()
new_x
array([5])
0).

Tôi đã đọc tài liệu mảng đeo mặt nạ nhiều lần, tìm kiếm ở khắp mọi nơi và cảm thấy hoàn toàn ngu ngốc. Tôi không thể tìm ra cuộc sống trong tôi làm thế nào để áp dụng mặt nạ từ mảng này sang mảng khác.

Example:

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]

Vì vậy, điều này hoạt động tốt .... nhưng để vẽ trục y này, tôi cần một trục X phù hợp. Làm cách nào để áp dụng mặt nạ từ mảng y vào mảng X? Một cái gì đó như thế này sẽ có ý nghĩa, nhưng tạo ra rác rưởi:

new_x = x[m.mask].copy()
new_x
array([5])

Vì vậy, làm thế nào trên trái đất được thực hiện (lưu ý mảng X mới cần phải là một mảng mới).

Edit:

Chà, có vẻ như một cách để làm điều này hoạt động như thế này:

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]

Nhưng điều đó thật lộn xộn! Tôi đang cố gắng tìm một giải pháp thanh lịch như IDL ...

Trong phần thứ 5 này của chuỗi xử lý hình ảnh, chúng tôi thảo luận thêm về các hoạt động số học và bitwise, và che giấu hình ảnh trong Python.

Chúng tôi khuyên bạn nên chạy qua, trước khi bắt đầu cuộc phiêu lưu học tập đeo mặt nạ của bạn ở đây.

Thiết lập môi trường

Các dòng mã sau đây được sử dụng trong tất cả các ứng dụng được đưa ra dưới đây. Thay vào đó, chúng tôi bao gồm những người ở đây để bạn không phải đọc qua một khối mã khổng lồ.

Giúp giảm sự lộn xộn :)

# importing numpy to work with pixels
import numpy as np

# importing argument parsers
import argparse

# importing the OpenCV module
import cv2


# initializing an argument parser object
ap = argparse.ArgumentParser()

# adding the argument, providing the user an option
# to input the path of the image
ap.add_argument("-i", "--image", required=True, help="Path to the image")

# parsing the argument
args = vars(ap.parse_args())

# reading the image location through args
# and reading the image using cv2.imread
image = cv2.imread(args["image"])

Các hoạt động số học trên hình ảnh sử dụng Python

Các hoạt động số học cho phép chúng tôi tăng cường rất nhiều khía cạnh của một hình ảnh.

Chúng ta có thể làm việc với ánh sáng, bóng tối, cải tiến màu đỏ, xanh dương và xanh lá cây.

Rất nhiều bộ lọc hình ảnh trên các ứng dụng sử dụng cùng một phương pháp để thay đổi và làm đẹp các bức ảnh.

Vì vậy, hãy để bắt đầu với tất cả các mã!

Đầu tiên, để hiểu liệu giới hạn có thể vượt quá 255 hoặc 0 hay không, chúng ta có thể tiến hành một bài kiểm tra đơn giản, cung cấp cho chúng ta

new_x = x[m.mask].copy()
new_x
array([5])
1 và
new_x = x[m.mask].copy()
new_x
array([5])
2.

# printing out details of image min, max and the wrap around
print("max of 255 :", str(cv2.add(np.uint8([200]), np.uint8([100]))))
print("min of 0 :", str(cv2.subtract(np.uint8([50]), np.uint8([100]))))

print("wrap around :", str(np.uint8([200]) + np.uint8([100])))
print("wrap around :", str(np.uint8([50]) - np.uint8([100])))

Trong ví dụ này, chúng tôi đang tăng cường độ của tất cả các pixel trong hình ảnh lên 100.

# adding pixels of value 255 (white) to the image
M = np.ones(image.shape, dtype="uint8") * 100
added = cv2.add(image, M)
cv2.imshow("Added", added)
cv2.waitKey(0)

Điều này được thực hiện bằng cách xây dựng một ma trận có cùng kích thước với hình ảnh của chúng tôi bằng mô -đun

new_x = x[m.mask].copy()
new_x
array([5])
3 và thêm nó vào hình ảnh của chúng tôi.

Trong trường hợp chúng tôi muốn làm tối một hình ảnh, chúng tôi trừ đi các giá trị pixel của hình ảnh, như hình dưới đây,

# adding pixels of value 0 (black) to the image
M = np.ones(image.shape, dtype="uint8") * 50
subtracted = cv2.subtract(image, M)
cv2.imshow("Subtracted", subtracted)
cv2.waitKey(0)

Điều này sẽ cung cấp cho bạn hai biến thể khác nhau của hình ảnh gốc, một cái sáng hơn và các biến thể khác.

Hoạt động bitwise

Chúng tôi sử dụng các hoạt động bitwise rất nhiều thời gian trong khi cố gắng che dấu hình ảnh.

Tính năng này của OpenCV cho phép chúng tôi lọc ra một phần của hình ảnh có liên quan đến chúng tôi.

Đang cài đặt

Để hoạt động trên các hoạt động bitwise, trước tiên chúng tôi cần hai biến hoặc hình ảnh mà chúng tôi có thể tiến hành các hoạt động trên.

Vì vậy, hãy để tạo ra một hình vuông bitwise và một vòng tròn bitwise thông qua đó chúng ta có thể sử dụng các hoạt động bitwise.

Lưu ý rằng các hoạt động bitwise đòi hỏi các hình ảnh phải có màu đen và trắng.

# creating a square of zeros using a variable
rectangle = np.zeros((300, 300), dtype="uint8")
cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1)
cv2.imshow("Rectangle : ", rectangle)

# creating a circle of zeros using a variable
circle = np.zeros((300, 300), dtype="uint8")
cv2.circle(circle, (150, 150), 150, 255, -1)
cv2.imshow("Circle : ", circle)

Các hình ảnh đầu ra mà bạn nhận được sẽ trông như thế này,

Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?
Bit Square

Kết hợp với hoạt động new_x = x[m.mask].copy() new_x array([5]) 4

Bổ sung bitwise đề cập đến việc bổ sung hai hình ảnh khác nhau và quyết định sẽ được hiển thị bằng hoạt động

new_x = x[m.mask].copy()
new_x
array([5])
4 trên mỗi pixel của hình ảnh.

# the bitwise_and function executes the AND operation
# on both the images
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
cv2.imshow("AND", bitwiseAnd)
cv2.waitKey(0)

Bitwise bổ sung cả vòng tròn và hình vuông cho chúng ta một đầu ra trông như thế này,

Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?
Và Bit Square

Đưa ra lựa chọn với hoạt động new_x = x[m.mask].copy() new_x array([5]) 6

BitWise hoặc cung cấp cho chúng tôi một sản phẩm của hai hình ảnh với hoạt động

new_x = x[m.mask].copy()
new_x
array([5])
6 được thực hiện trên mỗi pixel của hình ảnh.

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
0

Khi thực hiện thao tác bitwise hoặc, bạn sẽ nhận được một cái gì đó như thế này,

Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?
Hoặc hình vuông bit

Độc quyền với hoạt động new_x = x[m.mask].copy() new_x array([5]) 8

Một hoạt động khác được cung cấp bởi mô -đun

new_x = x[m.mask].copy()
new_x
array([5])
9 là hoạt động XOR, chúng ta có thể sử dụng thông qua hàm
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
0.

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
1XOr BIT SQUARE
Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?
XOR Bit Square

Phủ định bằng cách sử dụng hoạt động >>> import numpy as np >>> x = np.array([1,2,3,4]) >>> y = np.array([2,1,5,2]) >>> m = np.ma.masked_where(y>2, y) >>> new_x = np.ma.masked_array(x, m.mask) >>> print np.ma.compressed(new_x) [1 2 4] 1

Cuối cùng, chúng ta có hoạt động phủ định, được thực hiện bằng hàm

>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
2.

Hoạt động không chỉ yêu cầu một hình ảnh duy nhất vì chúng tôi không thêm hoặc trừ bất cứ điều gì ở đây.

Tuy nhiên, chúng tôi vẫn sử dụng nó trên cả hai ở đây, đó cũng là một lựa chọn.

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
2

Vòng tròn nằm trong hình vuông trong trường hợp này, và như vậy không thể nhìn thấy,

Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?
Không phải hình vuông bit

Mặt nạ hình ảnh bằng python opencv

Mặt nạ được sử dụng trong xử lý hình ảnh để xuất ra khu vực quan tâm, hoặc đơn giản là một phần của hình ảnh mà chúng tôi quan tâm.

Chúng tôi có xu hướng sử dụng các hoạt động bitwise để che giấu vì nó cho phép chúng tôi loại bỏ các phần của hình ảnh mà chúng tôi không cần.

Vì vậy, hãy để bắt đầu với mặt nạ!

Quá trình che giấu hình ảnh

Chúng tôi có ba bước trong mặt nạ.

  1. 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 cho nó là
    >>> import numpy as np
    >>> x = np.array([1,2,3,4])
    >>> y = np.array([2,1,5,2])
    >>> m = np.ma.masked_where(y>2, y)
    >>> new_x = np.ma.masked_array(x, m.mask)
    >>> print np.ma.compressed(new_x)
    [1 2 4]
    
    3.black canvas with the same dimensions as the image, and naming it as
    >>> import numpy as np
    >>> x = np.array([1,2,3,4])
    >>> y = np.array([2,1,5,2])
    >>> m = np.ma.masked_where(y>2, y)
    >>> new_x = np.ma.masked_array(x, m.mask)
    >>> print np.ma.compressed(new_x)
    [1 2 4]
    
    3.
  2. 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.white color.
  3. Thực hiện thao tác thêm bitwise trên hình ảnh với mặt nạ.

Theo cùng một quy trình, hãy để Lôi tạo một vài mặt nạ và sử dụng chúng trên hình ảnh của chúng tôi.

Đầu tiên, hãy để Lừa làm việc với mặt nạ hình chữ nhật.

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
3

Bây giờ, hãy để thử nó với mặt nạ vòng tròn.

import numpy as np

y = np.array([2,1,5,2])          # y axis
x = np.array([1,2,3,4])          # x axis
m = np.ma.masked_where(y>2, y)   # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
4

Nếu mọi thứ diễn ra tốt đẹp, chúng ta sẽ nhận được đầu ra trông giống như thế này,

Hướng dẫn how do you apply a mask in python? - bạn đắp mặt nạ bằng mỡ trăn như thế nào?
Mặt nạ hình chữ nhật

Sự kết luận

Cuối cùng, chúng tôi đã bắt đầu với cốt lõi của xử lý hình ảnh, và hiểu các hoạt động và mặt nạ bitwise trong đó là rất quan trọng.

Nó giúp chúng tôi chặn các bộ phận hoặc chỉ tham gia vào các phần của hình ảnh mà chúng tôi quan tâm, vì vậy, một khái niệm khá hữu ích.

Chúng tôi tiến hành với một tốc độ tốt, nhưng, trong trường hợp bạn muốn bỏ qua thời gian và đi đến cuối cùng, hãy là khách của tôi!

Ở đây, các bài viết cho phép bạn xem xét OpenCV và nhận dạng khuôn mặt, và việc triển khai Java của Android và Camerax Opencv.

Người giới thiệu

  • Trang web OpenCV chính thức
  • Giới thiệu để bắt đầu với OpenCV
  • Kho lưu trữ github của tôi để xử lý hình ảnh
  • Mã hoạt động số học
  • Mã hoạt động bitwise
  • Mã mặt nạ

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 che dấu số trong Python?

Điều hướng đến trang số và chọn số điện thoại bạn muốn sử dụng cho ứng dụng này.Từ việc thả xuống loại ứng dụng, chọn ứng dụng XML.Từ việc thả xuống ứng dụng PLIVO, chọn Mặt nạ số (tên chúng tôi đã đưa ra ứng dụng).Nhấp vào Cập nhật số để lưu.

Mặt nạ có nghĩa là gì trong Python?

Mảng đeo mặt nạ là các mảng có thể bị thiếu hoặc không hợp lệ.Mô-đun Numpy.MA cung cấp một sự thay thế gần như công việc cho Numpy hỗ trợ các mảng dữ liệu bằng mặt nạ.arrays that may have missing or invalid entries. The numpy.ma module provides a nearly work-alike replacement for numpy that supports data arrays with masks.

Làm thế nào để bạn làm mặt nạ boolean 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.