Bit vuôngKết hợp với phép toán AND
Bổ sung theo bit đề cập đến việc bổ sung hai hình ảnh khác nhau và quyết định hình ảnh nào sẽ được hiển thị bằng cách sử dụng thao tác
# 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])))
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)
Phép cộng từng bit của cả hình tròn và hình vuông cho chúng ta kết quả đầu ra trông như thế này,
VÀ Bit vuôngĐưa ra lựa chọn với phép toán OR
Bitwise OR cung cấp cho chúng tôi sản phẩm của hai hình ảnh với thao tác
# 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])))
5 được thực hiện trên mỗi pixel của hình ảnh# 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])))
1Khi thực hiện thao tác Bitwise OR, bạn sẽ nhận được thông tin như thế này,
HOẶC bit vuôngĐộc quyền với hoạt động XOR
Một thao tác khác được cung cấp bởi mô-đun
# 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])))
6 là thao tác XOR, chúng ta có thể sử dụng thao tác này thông qua hàm # 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])))
7# 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])))
4Hình vuông bit XORPhủ định sử dụng thao tác NOT
Cuối cùng, chúng ta có thao tác phủ định, được thực hiện bằng hàm
# 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])))
8Thao tác KHÔNG chỉ yêu cầu một hình ảnh vì chúng tôi không thêm hoặc bớt bất kỳ thứ 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 tùy chọn
# 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])))
6Trong trường hợp này, hình tròn nằm bên trong hình vuông và do đó không nhìn thấy được,
Không phải bit vuôngTạo mặt nạ cho hình ảnh bằng Python OpenCV
Mặt nạ được sử dụng trong Xử lý hình ảnh để xuất Vùng 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 thao tác bitwise để tạo mặt nạ 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 việc đắp mặt nạ
Quá trình tạo mặt nạ cho hình ảnh
Chúng tôi có ba bước trong việc che giấu
- Tạo một canvas đen có cùng kích thước với hình ảnh và đặt tên là
# 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])))
9 - Thay đổi các giá trị của mặt nạ bằng cách vẽ bất kỳ hình nào trong ảnh và tô màu trắng cho hình đó
- Thực hiện thao tác THÊM từng bit trên hình ảnh bằng mặt nạ
Theo quy trình tương tự, hãy tạo một vài mặt nạ và sử dụng chúng trên hình ảnh của chúng ta
Đầu tiên, hãy làm việc với mặt nạ hình chữ nhật
# 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])))
8Bây giờ, hãy thử với mặt nạ hình tròn
# 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])))
0Nếu mọi thứ hoạt động tốt, chúng ta sẽ nhận được kết quả đầu ra trông giống như thế này,
Mặt nạ hình chữ nhậtSự kết luận
Cuối cùng thì chúng ta cũng bắt đầu với cốt lõi của Xử lý hình ảnh và việc hiểu các hoạt động theo bit và mặt nạ trong đó là điều quan trọng
Nó giúp chúng tôi chặn các phần hoặc chỉ lấy 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 đang tiến hành với tốc độ khá, 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 là các bài viết cho phép bạn xem xét OpenCV và Nhận dạng khuôn mặt cũng như triển khai Java của Android và CameraX OpenCV