Mục lục:

Phát hiện màu trong Python bằng OpenCV: 8 bước
Phát hiện màu trong Python bằng OpenCV: 8 bước

Video: Phát hiện màu trong Python bằng OpenCV: 8 bước

Video: Phát hiện màu trong Python bằng OpenCV: 8 bước
Video: Bài 8 :Nhận dạng khuôn mặt full code Hướng dẫn giải thích - opencv python 2024, Tháng mười một
Anonim
Image
Image

Xin chào! Hướng dẫn này được sử dụng để hướng dẫn cách trích xuất một màu cụ thể từ một hình ảnh trong python bằng thư viện openCV. Nếu bạn chưa quen với kỹ thuật này thì đừng lo lắng, ở phần cuối của hướng dẫn này, bạn sẽ có thể lập trình chương trình phát hiện màu sắc của riêng mình.

Sau đây là các chức năng hoặc chúng ta có thể nói các kỹ thuật mà bạn sẽ học, 1. Cách đọc hình ảnh

2. Cách tạo thanh theo dõi

3. Cách điều chỉnh giá trị của Hue, Saturation và giá trị của hình ảnh bằng cách sử dụng các thanh theo dõi

4. Và sau đó sẽ có kết quả cuối cùng của bạn

Bạn có thể xem video đầu ra mà tôi đính kèm bên dưới.

Vậy hãy bắt đầu

Quân nhu

  • Python 3
  • thư viện openCV
  • thư viện numpy

Bước 1: Nhập thư viện

Nhập thư viện
Nhập thư viện

Hình ảnh có màu vàng ferrari như được hiển thị và chúng tôi sẽ lập trình để chỉ trích xuất màu vàng từ hình ảnh đó

Bước đầu tiên sẽ là nhập các thư viện của chúng tôi

1. Bao gồm thư viện openCV. Nó được gọi là cv2 trong python

2. Bao gồm thư viện numpy là np. "As" cho phép chúng ta numpy là np nên không cần phải viết numpy lặp đi lặp lại

Bước 2: Tạo thanh theo dõi

Tạo thanh theo dõi
Tạo thanh theo dõi

Thanh theo dõi được tạo để điều chỉnh giá trị của Hue, Saturation và Value trong hình ảnh.

cv2.nameWindow ("TrackBars") Dòng mã này được sử dụng để tạo một cửa sổ xuất mới và tên của cửa sổ được đặt là TrackBars (Bạn có thể đặt bất kỳ tên nào bạn muốn)

cv2.resizeWindow ("TrackBars", 600, 250) Chức năng này được sử dụng để thay đổi kích thước cửa sổ. "TrackBars" là cửa sổ bạn muốn thay đổi kích thước vì tôi muốn thay đổi kích thước cửa sổ TrackBars, tôi đã viết tên đó. Theo sau là hai số nguyên. Hai số nguyên đó là chiều rộng và chiều cao. Bạn có thể thử với hai con số đó để thay đổi kích thước

Bước 3: Tạo thanh theo dõi cho Hue, Saturation và Value

Tạo thanh theo dõi cho Huế, độ bão hòa và giá trị
Tạo thanh theo dõi cho Huế, độ bão hòa và giá trị
Tạo thanh theo dõi cho Huế, độ bão hòa và giá trị
Tạo thanh theo dõi cho Huế, độ bão hòa và giá trị

Bây giờ chúng ta sẽ tạo tổng cộng 6 thanh TrackBars cho Hue, Saturation và value. Mỗi cái sẽ có hai, tức là 1 cho tối thiểu và 1 cho tối đa. Chúng tôi sẽ sử dụng chức năng createTrackbar của openCV. Đầu tiên chúng ta sẽ xem cú pháp của hàm này.

cv2.createTrackbar ("WINDOWNAME", "MAINWINDOWNAME", "RANGE"). Điều này có thể khó hiểu nhưng đừng lo lắng, chúng tôi sẽ đi qua từng bước. Hãy nhớ một điều rằng trong openCV giá trị của màu sắc là 179, độ bão hòa là 255 và giá trị là 255

1. Tạo TrackBar cho hue min:

cv2.createTrackbar ("Hue min", "TrackBars", 0, 179, trống)

Trong Hue min này là tên trackbar, TrackBars là cửa sổ chính, 0 là vị trí mà thanh trượt của chúng ta sẽ ở trên và 179 là phạm vi có nghĩa là silder sẽ di chuyển từ 0-179

2. Tạo TrackBar cho màu sắc tối đa:

cv2.createTrackbar ("Hue max", "TrackBars", 179, 179, trống)

Trong Hue max này là tên trackbar, TrackBars là cửa sổ chính, 179 là vị trí mà thanh trượt của chúng ta sẽ ở và 179 là phạm vi tối đa có nghĩa là silder sẽ di chuyển từ 179-0

3. Tương tự lặp lại các bước cho sat min, sat max, val min và val max như trong hình

Hình ảnh có nền trắng là hình ảnh đầu ra. Đây là cách các thanh theo dõi của bạn sẽ trông như thế nào

Bước 4: Cách đọc và thay đổi kích thước hình ảnh

Cách đọc và thay đổi kích thước hình ảnh
Cách đọc và thay đổi kích thước hình ảnh

cv2.imread () cho phép bạn đọc hình ảnh. Một điều quan trọng mà bạn cần lưu ý là vị trí của hình ảnh của bạn phải nằm trong cùng một thư mục nơi chương trình được lưu. Chúng tôi sẽ đưa vào vòng lặp while vì nó sẽ chạy cho đến khi đọc hình ảnh hoặc chúng tôi có thể nói cho đến khi điều kiện là đúng

img = cv2.imread ("ferrari.jpg")

  • Trong phần này, tôi đã tạo một tên biến "img" mà tôi đang lưu trữ hình ảnh
  • Bên trong cv2.imread viết tên của hình ảnh với phần mở rộng của nó bên trong dấu ngoặc kép

Để thay đổi kích thước hình ảnh, chúng ta sẽ sử dụng hàm cv2.resize. Phần này là tùy chọn, nếu bạn muốn thay đổi kích thước thì có thể sử dụng chức năng này

Bên trong cv2.resize trước tiên hãy viết tên biến mà hình ảnh được lưu trữ, sau đó là chiều rộng và chiều cao của nó

Bước 5: Đọc các giá trị của thanh theo dõi để áp dụng nó vào hình ảnh

Đọc các giá trị của thanh theo dõi để áp dụng nó vào hình ảnh
Đọc các giá trị của thanh theo dõi để áp dụng nó vào hình ảnh
Đọc các giá trị của thanh theo dõi để áp dụng nó vào hình ảnh
Đọc các giá trị của thanh theo dõi để áp dụng nó vào hình ảnh

Được rồi, bây giờ chúng ta sẽ đọc các giá trị của thanh trackbar để chúng ta có thể áp dụng nó vào hình ảnh của mình. Chúng tôi sẽ lấy các giá trị bằng cách sử dụng hàm cv2.getTrackbarPos ().

Hãy bắt đầu với phần đó…

h_min = cv2.getTrackbarPos ("Hue min", "TrackBars")

Trong câu lệnh trên, tôi đang tạo một tên biến h_min trong đó tôi sẽ lưu giá trị của Hue min. Vì vậy, bên trong cv2.getTrackbarPos, đối số thứ nhất sẽ là "Hue min" vì tôi muốn các giá trị của hue min (Cách viết phải giống hệt với hàm createTrackbar) và đối số thứ 2 sẽ là tên của cửa sổ trackbar mà nó thuộc về.

  • Lặp lại quá trình tương tự cho h_max và phần còn lại của các hàm như được hiển thị trong hình trên và sau đó in tất cả các giá trị bằng print ()
  • Đầu ra được hiển thị trong hình ảnh thứ hai. Nó đang in các giá trị h_min, h_max, s_min, s_max, v_min, s_max

Bước 6: Hiển thị hình ảnh và thiết lập giới hạn trên và dưới

Hiển thị hình ảnh và thiết lập giới hạn trên và dưới
Hiển thị hình ảnh và thiết lập giới hạn trên và dưới

Bây giờ chúng ta có giá trị tối thiểu và tối đa của màu sắc, độ bão hòa và giá trị, chúng ta sẽ sử dụng giá trị này để lọc ra hình ảnh để chúng ta có thể xuất ra màu cụ thể của một hình ảnh.

Chúng tôi sẽ tạo một mặt nạ cho điều này bằng cách sử dụng hàm cv2.inRange. Và trước đó, chúng tôi sẽ đặt giới hạn trên và giới hạn dưới của màu sắc, độ bão hòa và giá trị

Vì vậy, hãy tạo một tên biến "thấp hơn" và sử dụng hàm mảng numpy đặt phạm vi min cho cả 3 như sau

low = np.array ([h_min, s_min, v_min])

Lặp lại bước tương tự cho phần trên

upper = np.array ([h_max, s_max, v_max])

Bây giờ chúng ta sẽ tạo một mặt nạ như sau

mask = cv2.inRange (thay đổi kích thước, thấp hơn, trên) Bên trong cv2.inRang, đối số thứ nhất sẽ là biến trong đó hình ảnh cuối cùng của tôi được lưu trữ, đối số thứ 2 sẽ là giới hạn dưới và đối số thứ 3 sẽ là giới hạn trên.

Bây giờ chúng ta sẽ hiển thị hình ảnh chính và mặt nạ. Để hiển thị chúng ta sẽ sử dụng hàm cv2.imshow ()

cv2.imshow ("img", thay đổi kích thước) Đây là để hiển thị hình ảnh chính. Đối số thứ nhất là tên của cửa sổ mà bạn có thể đặt bất kỳ tên nào bạn muốn và đối số thứ hai là biến trong đó hình ảnh chính của tôi được lưu trữ mà bạn muốn hiển thị.

Tương tự lặp lại các bước cho mặt nạ

cv2.imshow ("Đầu ra", mặt nạ)

Bước 7: Bây giờ là bước cuối cùng

Bây giờ là bước cuối cùng
Bây giờ là bước cuối cùng

Trong bước cuối cùng này, chúng tôi sẽ trích xuất màu của xe và hiển thị.

Tôi đã tạo một kết quả tên biến. Một lần nữa, bạn có thể đặt bất kỳ tên nào bạn muốn. Vì vậy, chúng tôi sẽ sử dụng hàm cv2.bitwise_and (), trong đó chúng tôi sẽ thêm vào các hình ảnh cùng nhau và tạo một hình ảnh mới. Và bất cứ nơi nào có các pixel trong cả hai hình ảnh, nó sẽ có giá trị là có hoặc "1".

result = cv2.bitwise_and (thay đổi kích thước, thay đổi kích thước, mặt nạ = mặt nạ)

  • Trong đối số thứ nhất này sẽ là hình ảnh của chúng ta
  • Đối số thứ 2 cũng sẽ là hình ảnh ban đầu của chúng tôi nhưng theo sau là mặt nạ được áp dụng mà chúng tôi đã tạo trước đó
  • Và cuối cùng chỉ cần hiển thị kết quả bằng chức năng imshow

Chỉ cần sao chép dán bước cuối cùng này chỉ là sự chậm trễ và bạn có thể thoát khỏi cửa sổ đầu ra bằng cách nhấn "a" trên bàn phím

Bước 8: Kết quả cuối cùng

Đề xuất: