Mục lục:

Phát hiện màu đơn giản bằng OpenCV: 6 bước
Phát hiện màu đơn giản bằng OpenCV: 6 bước

Video: Phát hiện màu đơn giản bằng OpenCV: 6 bước

Video: Phát hiện màu đơn giản bằng OpenCV: 6 bước
Video: Bai6: opencv python nhận diện đếm ngón tay - giải thích và hướng dẫn code - opencv tutorial python 2024, Tháng mười một
Anonim
Nhận diện màu đơn giản bằng OpenCV
Nhận diện màu đơn giản bằng OpenCV

Chào! Hôm nay tôi sẽ giới thiệu một phương pháp đơn giản để phát hiện màu từ video trực tiếp bằng OpenCV và python.

Về cơ bản, tôi sẽ chỉ kiểm tra màu cần thiết có trong khung nền hay không và sử dụng các mô-đun OpenCV, tôi sẽ che vùng đó và đồng thời hiển thị khung.

Bước 1: Tệp tiêu đề

Tệp tiêu đề
Tệp tiêu đề

Bây giờ ở đây tôi đã sử dụng hai tệp tiêu đề là cv2 và NumPy. Về cơ bản cv2 là thư viện OpenCV tải tất cả các tệp c ++ quan trọng trong khi sử dụng các lệnh trong mã (nó chứa tất cả các định nghĩa).

Và Numpy là một thư viện python cần thiết để lưu trữ một mảng đa chiều. Chúng tôi sẽ sử dụng để lưu trữ tọa độ dải màu của chúng tôi.

Và numpy như np về cơ bản giúp mã của chúng ta rút ngắn một chút bằng cách sử dụng np mọi lúc thay vì numpy.

Bước 2: Quay video

Quay video
Quay video

Điều này khá đơn giản khi sử dụng python. Ở đây chúng ta chỉ cần bật trình ghi video để nó có thể bắt đầu quay các khung hình.

Bây giờ giá trị bên trong VideoCapture cho biết máy ảnh, trong trường hợp của tôi, máy ảnh được kết nối với máy tính xách tay của tôi, vì vậy 0.

Bạn có thể thực hiện tương tự với 1 cho camera phụ, v.v. VideoCapture tạo đối tượng cho nó.

Bước 3: Chụp khung và xác định màu

Chụp khung hình và xác định màu sắc
Chụp khung hình và xác định màu sắc

Bây giờ ở đây chúng ta phải làm gì đó để chúng ta có thể chụp được khung hình tức thì của video, điều này sẽ giúp chúng ta trích xuất hình ảnh và chúng ta có thể làm việc trên đó theo yêu cầu.

Vòng lặp "while" sẽ giúp chúng tôi chạy vòng lặp đến thời gian yêu cầu của chúng tôi. Bây giờ "_, frame = cap.read ()" được sử dụng để kiểm tra tính hợp lệ của Frame được chụp và lưu trữ nó. "cap.read () là một biến boolean và trả về true nếu khung được đọc chính xác và nếu bạn không nhận được khung nào, nó sẽ không hiển thị bất kỳ lỗi nào, bạn chỉ nhận được Không có.

Bây giờ dòng 11 và dòng 12 về cơ bản xác định phạm vi màu mà chúng ta cần phát hiện. Đối với điều này, tôi đã sử dụng màu xanh lam.

Bạn có thể tiếp tục với bất kỳ màu nào mà bạn chỉ cần nhập các giá trị BGR cho màu cụ thể đó. Tốt hơn nên xác định hai mảng bằng cách sử dụng mảng không có hạt vì việc phát hiện một màu cụ thể trong thế giới thực sẽ không phục vụ mục đích của chúng ta thay vì chúng ta sẽ xác định một dải màu xanh lam để nó phát hiện trong phạm vi đó.

Đối với điều này, tôi đã xác định hai biến lưu trữ giá trị BGR thấp hơn và giá trị BGR cao hơn.

Bước 4: Tạo mặt nạ và giải nén

Tạo mặt nạ và chiết xuất
Tạo mặt nạ và chiết xuất

Bây giờ ở đây có nhiệm vụ chính là che khung và trích xuất màu của khung. Tôi đã sử dụng các lệnh được xác định trước có trong thư viện trong OpenCV để thực hiện việc tạo mặt nạ. Về cơ bản, tạo mặt nạ là quá trình loại bỏ một số phần của khung hình, tức là chúng ta sẽ loại bỏ các pixel có giá trị BGR màu không nằm trong dải màu đã xác định và điều này được thực hiện bởi cv2.inRange. Sau đó, chúng tôi áp dụng dải màu cho hình ảnh được che tùy thuộc vào giá trị pixel và đối với điều này, chúng tôi sẽ sử dụng cv2.bitwise_and, Nó sẽ chỉ cần gán màu cho vùng được che tùy thuộc vào giá trị mặt nạ và dải màu.

Liên kết cho cv2. bitwise_and:

Bước 5: Cuối cùng là Hiển thị

Cuối cùng là hiển thị!
Cuối cùng là hiển thị!

Ở đây tôi đã sử dụng cv2.imshow () cơ bản để hiển thị cho mỗi khung dưới dạng hình ảnh. Vì tôi có dữ liệu khung được lưu trữ trong các biến nên tôi có thể truy xuất chúng trong imshow (). Ở đây tôi đã hiển thị tất cả ba khung, gốc, mặt nạ và màu.

Bây giờ chúng ta phải thoát khỏi vòng lặp while. Đối với điều này, chúng ta chỉ có thể triển khai cv2.wait. Key (). Về cơ bản, nó cho biết thời gian chờ trước khi phản hồi. Vì vậy, nếu bạn vượt qua 0, nó sẽ đợi vô hạn và 0xFF cho biết kiến trúc là 64bit. "ord ()" chỉ định ký tự mà khi được nhấn sẽ thực hiện lệnh break trong khối if và nó sẽ thoát ra khỏi vòng lặp.

Sau đó cap.release () đóng trình ghi video và cv2.destroyAllWindows () đóng tất cả các cửa sổ đã mở.

Nếu bạn có bất kỳ vấn đề, xin vui lòng cho tôi biết.

Liên kết đến mã nguồn:

Đề xuất: