Hướng dẫn mask rgb image python - mặt nạ rgb hình ảnh con trăn

I am trying detect skin colors in an image. I found some values for skin colors and now I am trying to isolate color of these ranges from rest of the image. Here is my code:
Here is my code:

low = np.array([0,39,31])
high = np.array([10,66,66])
hsv = cv.cvtColor(img,cv.COLOR_RGB2HSV)
mask = cv.inRange(hsv,low,high)
masked_img = cv.bitwise_and(hsv,hsv,mask=mask)

I have tried this and am getting a blank screen. What could be the right approach for this?
What could be the right approach for this?

77

Nội dung chính ShowShow

  • Ví dụ nhân bản liền mạch
  • Nhân bản thông thường (bình thường_clone) so với nhân bản hỗn hợp (mixed_clone)
  • Kết quả nhân bản bình thường
  • Kết quả nhân bản hỗn hợp
  • Kết quả video nhân bản liền mạch
  • Chỉnh sửa hình ảnh Poisson
  • Đăng ký và tải xuống mã
  • Chức năng nào được sử dụng để sao chép hình ảnh với mặt nạ?
  • Làm thế nào để bạn sao chép một hình ảnh trong Python?
  • Làm thế nào để bạn che dấu một hình ảnh trong Python?

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.
Learn more.

Tôi chưa quen với OpenCV, đây là một câu hỏi, hàm Python hoạt động giống như CV :: Clone () trong CPP là gì? Tôi chỉ cố gắng để có được một trực tràng bởi

    rectImg = img[10:20, 10:20]

Nhưng khi tôi vẽ một dòng trên đó, tôi thấy dòng xuất hiện cả trên IMG và trực tràng, vì vậy, làm thế nào tôi có thể hoàn thành việc này?

Đã hỏi ngày 14 tháng 5 năm 2013 lúc 0:05May 14, 2013 at 0:05May 14, 2013 at 0:05

Câu trả lời đầu tiên là chính xác nhưng bạn nói rằng bạn đang sử dụng CV2 vốn sử dụng các mảng Numpy. Vì vậy, để tạo một bản sao hoàn chỉnh của Say "MyImage":

newImage = myImage.copy()

Trên đây là đủ. Không cần phải nhập khẩu numpy.

Đã trả lời ngày 27 tháng 2 năm 2016 lúc 7:22Feb 27, 2016 at 7:22Feb 27, 2016 at 7:22

Ash Ketchumash KetchumAsh KetchumAsh Ketchum

1.7801 Huy hiệu vàng11 Huy hiệu bạc 6 Huy hiệu Đồng1 gold badge11 silver badges6 bronze badges1 gold badge11 silver badges6 bronze badges

Nếu bạn sử dụng

newImage = myImage.copy()
2, phương thức chính xác là sử dụng phương thức
newImage = myImage.copy()
3 trong Numpy. Nó sẽ tạo ra một bản sao của mảng bạn cần. Nếu không, nó sẽ chỉ tạo ra một cái nhìn của đối tượng đó.

eg:

In [1]: import numpy as np

In [2]: x = np.arange(10*10).reshape((10,10))

In [4]: y = x[3:7,3:7].copy()

In [6]: y[2,2] = 1000

In [8]: 1000 in x
Out[8]: False     # see, 1000 in y doesn't change values in x, parent array.

Đã trả lời ngày 14 tháng 5 năm 2013 lúc 5:01May 14, 2013 at 5:01May 14, 2013 at 5:01

Abid Rahman Kabid Rahman KAbid Rahman KAbid Rahman K

50.9K29 Huy hiệu vàng145 Huy hiệu bạc155 Huy hiệu đồng29 gold badges145 silver badges155 bronze badges29 gold badges145 silver badges155 bronze badges

1

Sử dụng Python 3 và OpenCV-Python phiên bản 4.4.0, mã sau sẽ hoạt động:

img_src = cv2.imread('image.png')
img_clone = img_src.copy()

BSMP

4.3968 Huy hiệu vàng34 Huy hiệu bạc43 Huy hiệu đồng8 gold badges34 silver badges43 bronze badges8 gold badges34 silver badges43 bronze badges

Đã trả lời ngày 13 tháng 10 năm 2020 lúc 16:18Oct 13, 2020 at 16:18Oct 13, 2020 at 16:18

2

Bạn chỉ có thể sử dụng thư viện tiêu chuẩn Python. Tạo một bản sao nông của hình ảnh gốc như sau:

import copy

original_img = cv2.imread("foo.jpg")
clone_img = copy.copy(original_img)

Đã trả lời ngày 21 tháng 4 năm 2015 lúc 14:00Apr 21, 2015 at 14:00Apr 21, 2015 at 14:00

Yildirimyildirimyildirimyildirim

3167 Huy hiệu bạc14 Huy hiệu Đồng7 silver badges14 bronze badges7 silver badges14 bronze badges

1

Phương pháp yêu thích của tôi sử dụng CV2.copymakeborborder không có biên giới, như vậy.

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE)

Đã trả lời ngày 14 tháng 5 năm 2015 lúc 0:32May 14, 2015 at 0:32May 14, 2015 at 0:32

Jack Guyjack GuyJack GuyJack Guy

8.0368 Huy hiệu vàng53 Huy hiệu bạc83 Huy hiệu Đồng8 gold badges53 silver badges83 bronze badges8 gold badges53 silver badges83 bronze badges

1

Hình 1: Ví dụ nhân bản liền mạch: Một chiếc máy bay được nhân bản vào bức tranh của một bầu trời buổi tối.

Một trong những tính năng mới thú vị được giới thiệu trong OpenCV 3 được gọi là nhân bản liền mạch. Với tính năng mới này, bạn có thể sao chép một đối tượng từ một hình ảnh và dán nó vào một hình ảnh khác tạo ra một tác phẩm trông liền mạch và tự nhiên. & nbsp; hình ảnh trên được tạo bằng cách sử dụng một cảnh trên bầu trời và của một chiếc máy bay. & nbsp; Nếu tôi chỉ đơn giản là phủ lên máy bay & nbsp; hình ảnh trên hình ảnh bầu trời, kết quả sẽ trông thật lố bịch (xem Hình 2).

Hình 2: Bầu trời với mặt phẳng phủ lên.

Bây giờ tất nhiên không ai trong tâm trí đúng đắn của họ sẽ làm một sáng tác như thế. Rõ ràng bạn sẽ che dấu hình ảnh một cách cẩn thận, và có lẽ sau khi dành nửa ngày trong Photoshop, có một hình ảnh trông giống như Hình 3.

Hình 3: Hình ảnh bầu trời với máy bay phủ lên mặt nạ cẩn thận.

Nếu bạn là một nghệ sĩ, bạn sẽ dành một nửa ngày nữa và điều chỉnh cẩn thận ánh sáng trên máy bay đến hình ảnh ánh sáng của bầu trời và tạo ra một tác phẩm tuyệt đẹp.

Có hai vấn đề tuy nhiên. Đầu tiên, bạn không có nửa ngày để chi tiêu. Thứ hai, bạn có lẽ không phải là một nghệ sĩ!

Sẽ rất tuyệt nếu bạn có thể làm một mặt nạ rất thô xung quanh máy bay, nhưng vẫn tạo ra một tác phẩm đẹp trông giống như Hình 1? Điều gì sẽ xảy ra nếu bạn đã làm nó chỉ trong 10 dòng mã? Bây giờ, won đã chỉ là tuyệt vời, nó sẽ rất tệ!

Trước khi tôi chỉ cho bạn mã, hãy để tôi dành một giờ để giải thích lý thuyết thú vị đằng sau việc nhân bản liền mạch. Đợi đã, tôi có một ý tưởng tốt hơn. Trước tiên, hãy đi sâu vào mã.

Ví dụ nhân bản liền mạch

Nhìn nhanh vào việc sử dụng Python đầu tiên Python
Python

output = cv2.seamlessClone(src, dst, mask, center, flags)

C ++

    rectImg = img[10:20, 10:20]
0
SRC Hình ảnh nguồn sẽ được nhân bản vào hình ảnh đích. Trong ví dụ của chúng tôi, nó là máy bay.
DST Hình ảnh đích mà hình ảnh nguồn sẽ được nhân bản. Trong ví dụ của chúng tôi, đó là hình ảnh bầu trời.
mặt nạ Một mặt nạ thô xung quanh đối tượng bạn muốn sao chép. Đây phải là kích thước của hình ảnh nguồn. Đặt nó thành một hình ảnh toàn màu trắng nếu bạn lười biếng!
center  Vị trí của trung tâm của hình ảnh nguồn trong hình ảnh đích.
cờ Hai lá cờ hiện đang hoạt động là bình thường_clone và mixed_clone. Tôi đã bao gồm một ví dụ để thể hiện sự khác biệt.
đầu ra Đầu ra / hình ảnh kết quả.

Bây giờ, hãy để Lôi nhìn vào mã mà tôi đã sử dụng để tạo các hình ảnh trên.

Tải xuống mã để dễ dàng làm theo hướng dẫn này, vui lòng tải về mã bằng cách nhấp vào nút bên dưới. Nó miễn phí! To easily follow along this tutorial, please download code by clicking on the button below. It's FREE! To easily follow along this tutorial, please download code by clicking on the button below. It's FREE!

Ví dụ Python

    rectImg = img[10:20, 10:20]
1

Ví dụ C ++

    rectImg = img[10:20, 10:20]
2

Trong ví dụ trên, loại nhân bản (cờ) tôi đã sử dụng là bình thường_clone. Có một loại khác, mixed_clone, khác biệt một cách tinh tế so với bình thường_clone. Hãy cùng xem hai loại khác nhau về chi tiết như thế nào.

Nhân bản thông thường (bình thường_clone) so với nhân bản hỗn hợp (mixed_clone)

Tôi có một đứa con trai 5 tuổi, người cho tôi tôi yêu bạn vé nếu tôi đối xử tốt với anh ấy. Đã có lúc trẻ em khao khát sự chấp thuận của cha mẹ chúng, nhưng những ngày này, cha mẹ phải cố gắng hết sức để kiếm tiền cho tôi. Yêu bạn vé trong dịch vụ của Tầm nhìn máy tính (xem Hình 4).

Hình 4: Một người tôi yêu bạn vé.

Chúng ta hãy cố gắng sao chép hình ảnh này lên một kết cấu bằng gỗ được hiển thị trong Hình 5. Chúng ta sẽ lười biếng và sử dụng mặt nạ nguồn là tất cả màu trắng và sao chép hình ảnh nguồn ngay ở trung tâm của hình ảnh kết cấu bằng gỗ.

Hình 5: Kết cấu gỗ

Ví dụ Python

newImage = myImage.copy()
0

Ví dụ C ++

newImage = myImage.copy()
1

Trong ví dụ trên, loại nhân bản (cờ) tôi đã sử dụng là bình thường_clone. Có một loại khác, mixed_clone, khác biệt một cách tinh tế so với bình thường_clone. Hãy cùng xem hai loại khác nhau về chi tiết như thế nào.

Nhân bản thông thường (bình thường_clone) so với nhân bản hỗn hợp (mixed_clone)

Tôi có một đứa con trai 5 tuổi, người cho tôi tôi yêu bạn vé nếu tôi đối xử tốt với anh ấy. Đã có lúc trẻ em khao khát sự chấp thuận của cha mẹ chúng, nhưng những ngày này, cha mẹ phải cố gắng hết sức để kiếm tiền cho tôi. Yêu bạn vé trong dịch vụ của Tầm nhìn máy tính (xem Hình 4).

Hình 4: Một người tôi yêu bạn vé.

Chúng ta hãy cố gắng sao chép hình ảnh này lên một kết cấu bằng gỗ được hiển thị trong Hình 5. Chúng ta sẽ lười biếng và sử dụng mặt nạ nguồn là tất cả màu trắng và sao chép hình ảnh nguồn ngay ở trung tâm của hình ảnh kết cấu bằng gỗ.

Hình 5: Kết cấu gỗ

Kết quả nhân bản bình thường

Nếu chúng ta sử dụng nhân bản thông thường bằng cách sử dụng cờ normal_clone, chúng ta sẽ nhận được kết quả được hiển thị trong Hình 6. Bây giờ chúng ta đã không sử dụng mặt nạ tốt và bạn có thể thấy làm mịn quá nhiều giữa các từ của tôi và tình yêu, và giữa bạn Càng và Paa Paa. Chắc chắn chúng tôi đã lười biếng. Chúng tôi có thể đã tạo ra một mặt nạ thô và cải thiện kết quả. & nbsp; Nhưng nếu bạn lười biếng và thông minh, bạn sẽ sử dụng nhân bản hỗn hợp.

Hình 6: Ví dụ bản sao bình thường của OpenCV

Kết quả nhân bản hỗn hợp“Poisson Image Editing”, by Patrick Perez, Michel Gangnet, and Andrew Blake.

Trong việc nhân bản thông thường, kết cấu (gradient) của hình ảnh nguồn được bảo tồn trong vùng nhân bản. Trong nhân bản hỗn hợp, kết cấu (gradient) của vùng nhân bản được xác định bởi sự kết hợp của nguồn và hình ảnh đích. Nhân bản hỗn hợp không tạo ra các vùng trơn tru vì nó chọn kết cấu chiếm ưu thế (gradient) giữa hình ảnh nguồn và đích. Kết quả của việc nhân bản hỗn hợp được thể hiện trong Hình 7. Lưu ý rằng kết cấu không còn mượt mà giữa các trò chơi của tôi và tình yêu, và bạn, và bạn. Những người lười biếng cổ vũ!

Hình 7: Ví dụ nhân bản hỗn hợp OpenCV

Kết quả video nhân bản liền mạch

Tôi lấy những hình ảnh của máy bay và bầu trời, và thay đổi vị trí của máy bay để tạo ra hình ảnh động này. Mixed_clone cho kết quả tốt hơn và bạn hầu như không nhận thấy bất kỳ vật phẩm nào. Nhân bản hình ảnh 300 × 194 (máy bay) lên hình ảnh 1000 × 560 (bầu trời) mất khoảng 0,4 giây.

Chỉnh sửa hình ảnh Poisson

  • Nhân bản kết hợp tại OpenCV là một triển khai của một bài báo Siggraph 2003 có ảnh hưởng có tựa đề là Poisson Image Editing, bởi Patrick Perez, Michel Gangnet và Andrew Blake.“Poisson Image Editing”, by Patrick Perez, Michel Gangnet, and Andrew Blake.
  • Bây giờ chúng ta biết rằng nếu chúng ta pha trộn các cường độ (giá trị RGB) của hình ảnh nguồn (máy bay) với hình ảnh đích (bầu trời) Làm việc với độ dốc hình ảnh thay vì cường độ hình ảnh có thể tạo ra kết quả thực tế hơn nhiều. Sau khi nhân bản kết hợp cường độ của hình ảnh kết quả trong vùng đeo mặt nạ không giống với cường độ của vùng nguồn trong khu vực đeo mặt nạ. Thay vào đó, độ dốc của hình ảnh kết quả trong vùng đeo mặt nạ giống như độ dốc của vùng nguồn trong khu vực đeo mặt nạ. Ngoài ra, cường độ của hình ảnh kết quả ở ranh giới của vùng đeo mặt nạ giống như cường độ của hình ảnh đích (bầu trời).

Các tác giả cho thấy điều này được thực hiện bằng cách giải một phương trình Poisson, và do đó tiêu đề của bài báo - chỉnh sửa hình ảnh Poisson. Các chi tiết lý thuyết và thực hiện của bài báo thực sự rất tuyệt, nhưng vượt ra ngoài phạm vi của bài đăng này. Tuy nhiên, nếu bạn đọc bài báo và có câu hỏi, hãy hỏi họ trong phần bình luận.

Hàm Copyto () không xóa đầu ra trước khi sao chép.Nếu bạn muốn thay đổi vĩnh viễn hình ảnh gốc, bạn phải thực hiện một bản sao/bản sao/bài tập bổ sung.Hàm Copyto () không được xác định cho hình ảnh đầu vào/đầu ra chồng chéo.Vì vậy, bạn không thể sử dụng cùng một hình ảnh với cả đầu vào và đầu ra. function does not clear the output before copying. If you want to permanently alter the original Image, you have to do an additional copy/clone/assignment. The copyTo() function is not defined for overlapping input/output images. So you can't use the same image as both input and output. function does not clear the output before copying. If you want to permanently alter the original Image, you have to do an additional copy/clone/assignment. The copyTo() function is not defined for overlapping input/output images. So you can't use the same image as both input and output.

Làm thế nào để bạn sao chép một hình ảnh trong Python?

Các bước để sao chép một tệp bằng Python...

Bước 1: Chụp đường dẫn ban đầu.Để bắt đầu, hãy chụp đường dẫn nơi tệp của bạn hiện đang được lưu trữ.....

Bước 2: Chụp đường dẫn đích.Tiếp theo, chụp đường dẫn đích nơi bạn muốn sao chép tệp.....

Bước 3: Sao chép tệp trong Python bằng SHOWIL.copyfile ..

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