Mục lục:
- Quân nhu
- Bước 1: Chức năng FaceDetect
- Bước 2: Chức năng BackgroundRemove
- Bước 3: Chức năng VideoEdges
- Bước 4: Chức năng VideoBlur
- Bước 5: Cải tiến
Video: Các dự án cơ bản của OpenCV: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:31
Trong dự án này, chúng tôi khám phá một số chức năng OpenCV cơ bản thông qua 4 dự án đơn giản liên quan đến luồng video trực tiếp. Đó là nhận dạng khuôn mặt, xóa nền, hiển thị hình ảnh đặc biệt của các cạnh và áp dụng hiệu ứng làm mờ cho luồng video trực tiếp. Mục đích chính của tôi khi thử các dự án này chỉ đơn giản là để làm quen với giao diện OpenCV, vì tôi dự định nghiên cứu sâu hơn trong lĩnh vực thị giác máy tính
Quân nhu
- Máy tính chạy Python
- Mở thư viện CV, thư viện Numpy, thư viện tkinter, thư viện sys
- Máy ảnh để kết nối với máy tính (nếu máy tính chưa có)
- Tệp python của chương trình (bao gồm trong hướng dẫn này)
- tệp xml haarcascade (bao gồm trong tệp hướng dẫn này)
Bước 1: Chức năng FaceDetect
Chức năng này hiển thị video trên máy ảnh của bạn với các ô vuông màu xanh lục trên bất kỳ mặt nào mà máy ảnh nhận được. Trong đoạn mã, chúng tôi sử dụng hàm cv2. VideoCapture () để lưu trữ video mà chúng tôi đang quay trong một đối tượng có tên là "capture". CAPTURE_INDEX là một số do máy tính của bạn đặt tương ứng với chỉ số của máy ảnh trong danh sách đầu vào video của máy tính. Nếu bạn không có máy ảnh bên ngoài được kết nối với máy tính của mình, 0 hoặc 1 sẽ hoạt động.
Đối tượng face_cascade được khởi tạo bằng cách sử dụng hàm cascadeClassifier và tệp "haarcascade_frontalface_default.xml" được tìm thấy trong github OpenCV. Chúng tôi sử dụng đối tượng này để lưu trữ các khuôn mặt được phát hiện trong danh sách "khuôn mặt" dưới dạng một mục nhập bốn chiều giữ các mặt tọa độ x, tọa độ y, chiều rộng và chiều cao. Sau đó, chúng tôi vẽ một hình chữ nhật bao quanh khuôn mặt một cách hoàn hảo bằng cách sử dụng hàm cv2.rectangle
Từ video này, OpenCV chụp nhiều hình ảnh trong vòng lặp while của chúng tôi bằng cách sử dụng capture.read () và lưu trữ hình ảnh trong khung mà chúng tôi đặt tên là "img". Mỗi hình ảnh sau đó được diễn giải và sửa đổi theo ý muốn của chúng tôi. Đối với faceDetect, chúng tôi làm cho hình ảnh có màu xám bằng cách sử dụng hàm cvtColor để chuyển đổi bất kỳ hình ảnh nào được cung cấp trong tham số đầu tiên thành một loại màu hình ảnh cụ thể được chỉ định trong tham số thứ hai. Danh sách các giá trị được chấp nhận cho tham số thứ hai có thể được tìm thấy trực tuyến. Sau đó, chúng tôi hiển thị hình ảnh trong một cửa sổ có tên là "Phát hiện khuôn mặt" bằng cách sử dụng hàm imshow () lấy một chuỗi ký tự cho tên cửa sổ và khung hình ảnh được hiển thị.
Cuối cùng chúng ta đợi người dùng nhập phím q bằng hàm cv2.waitKey (). Mặt nạ 0xFF được sử dụng như một quy ước cho các máy tính 64 bit. Sau khi người dùng kết thúc luồng video, chức năng faceDetect sẽ giải phóng đối tượng chụp sau đó hủy mọi cửa sổ khác được mở trong giao diện OpenCV. Tất cả các chức năng khác tuân theo một cấu trúc thiết kế tương tự.
Bước 2: Chức năng BackgroundRemove
Chức năng này cố gắng xóa phần nền của video của chúng tôi và chỉ để lại hình ảnh nền trước. Nó có thể không hoạt động trên một số máy ảnh, vì chúng sử dụng chức năng điều chỉnh ánh sáng được kích hoạt khi các đối tượng / tiêu điểm khác nhau đi vào khung hình. Nếu chức năng backgroundRemove của bạn không hoạt động, đừng lo lắng - nó có thể chỉ là máy ảnh của bạn!
Để sử dụng chức năng này, hãy bước ra khỏi khung máy ảnh và nhấn phím "d" để chụp ảnh nền. Điều quan trọng là không có vật thể chuyển động nào ở hậu cảnh mà bạn muốn chụp. Sau đó, chúng ta có thể quay trở lại khung máy ảnh. Nếu chức năng hoạt động, người dùng sẽ chỉ nhìn thấy chính họ trên luồng video của chức năng. Bất kỳ nhiễu / đốm màu đen nào trong hình ảnh tiền cảnh có thể là kết quả của việc điều chỉnh ánh sáng của máy ảnh. Để chụp một phông nền khác, nhấn phím "r" để khởi tạo lại, sau đó nhấn lại "d".
Một số ưu điểm chính cho chức năng này là sử dụng boolean "cờ" được nâng lên ngay khi người dùng nhấn nút d. Thao tác này chụp nền và cho phép chúng tôi xóa nền đó khỏi video được chức năng phát trực tiếp. Mục đích của chúng tôi là lưu trữ hình ảnh nền trong ref_img để chúng tôi có thể phân biệt nó với hình ảnh tiền cảnh, nơi chụp bất kỳ đối tượng chuyển động nào. Chúng tôi sử dụng hàm cv2.subtract () để trừ hình ảnh mặt đất phía trước khỏi hình ảnh nền và ngược lại, sau đó loại bỏ bất kỳ sự khác biệt nhỏ nào trong hai hình ảnh ngay sau đó. Nền bị bôi đen.
Fgmask được tạo bằng cách sử dụng sự khác biệt giữa hai hình ảnh này và sau đó được áp dụng cho luồng video chức năng bằng cách sử dụng hàm OpenCV cv2.bitwise_and ().
Bước 3: Chức năng VideoEdges
Hàm này trả về luồng video trực tiếp của chúng tôi, nhưng các cạnh có thể phát hiện được hiển thị màu trắng trong khi mọi thứ khác bị bôi đen. Điều phân biệt chức năng này với các chức năng khác là việc chuyển đổi video gốc của chúng tôi từ định dạng RBG sang HSV, viết tắt của màu sắc, độ bão hòa và sự biến đổi - một phương pháp xử lý ánh sáng và màu sắc khác với video. Với phương pháp này, chúng ta có thể dễ dàng phân biệt các đường viền trong video bằng cách áp dụng bộ lọc (red_low thành red_high).
Canny Edge Detection được sử dụng để phát hiện các cạnh trong hình ảnh. Nó chấp nhận một hình ảnh tỷ lệ xám làm đầu vào và nó sử dụng một thuật toán nhiều tầng.
Bước 4: Chức năng VideoBlur
Chức năng này được sử dụng để thêm hiệu ứng làm mờ vào luồng video của chúng tôi. Hàm đơn giản gọi hàm GaussianBlur cv2 trên khung của chúng ta. Bạn có thể tìm thêm thông tin về hàm gaussianBlur tại đây:
opencv-python-tutroals.readthedocs.io/en/l…
Bước 5: Cải tiến
Chức năng nhạy cảm nhất trong dự án này là chức năng xóa phông nền, vì nó yêu cầu sử dụng máy ảnh không có chức năng điều chỉnh ánh sáng. Có thể có một bộ chức năng tốt hơn trong thư viện OpenCV có thể giải thích cho việc điều chỉnh ánh sáng này và xóa phông nền một cách suôn sẻ (tương tự như màn hình màu xanh lá cây).
Chúng tôi cũng có thể sử dụng các chức năng phát hiện khuôn mặt khác có thể tạo ra các đối tượng có nhiều chức năng hơn ngoài việc chỉ trả về tọa độ (x, y). Có lẽ một chương trình nhận dạng khuôn mặt với khả năng ghi nhớ khuôn mặt sẽ không quá khó để thực hiện.
Chức năng làm mờ có thể được tùy chỉnh nhiều hơn thông qua điều khiển trực quan của người dùng. Ví dụ: người dùng có thể muốn điều chỉnh cường độ của hiệu ứng làm mờ hoặc chọn một khu vực cụ thể trong khung để làm mờ.
Đề xuất:
Chuyển văn bản thành giọng nói Nhấp vào UChip được hỗ trợ bởi ARM cơ bản và các SBC được hỗ trợ bởi ARM cơ bản khác: 3 bước
Chuyển văn bản thành giọng nói Nhấp vào UChip hỗ trợ bởi ARM cơ bản và các SBC được hỗ trợ bởi ARM cơ bản khác: Giới thiệu: Chúc một ngày tốt lành. Tên tôi là Tod. Tôi là một chuyên gia hàng không và quốc phòng, cũng là một chuyên gia về lĩnh vực hàng không và quốc phòng
Nhà tuyển dụng Robo của Makerspace - Nhận câu trả lời cho các câu hỏi thường gặp của bạn: 4 bước
Nhà tuyển dụng Robo của Makerspace - Nhận câu trả lời cho các câu hỏi thường gặp của bạn: Năm ngoái, tôi đã trình bày với hiệu trưởng nhà trường về ý tưởng tổ chức một lớp Makerspace ngoại khóa dành cho những sinh viên tò mò muốn biết mọi thứ về mọi công cụ mà chúng tôi có. Vì vậy, cuối cùng khi anh ấy đồng ý, tôi biết tôi phải thu hút tất cả sự quan tâm của học sinh
Cách sắp xếp các bảng Pinterest của bạn thành các phần: 7 bước
Cách sắp xếp các Bảng Pinterest của bạn thành các Phần: Chào mừng bạn đến với hướng dẫn này về cách: dễ dàng tạo các Phần trong Bảng Pinterest của bạn và sắp xếp các Ghim của bạn hơn nữa. Hướng dẫn này sử dụng Pinterest trên trình duyệt web của bạn
Bàn xoay dễ dàng tuyệt vời để giới thiệu các dự án của bạn: 5 bước
Bàn xoay dễ dàng tuyệt vời để giới thiệu các dự án của bạn: Trên Kênh YouTube của mình, tôi cũng đánh giá một số sản phẩm, vì vậy tôi luôn muốn tạo một bàn xoay đẹp để giới thiệu các sản phẩm mới. Giống như tất cả những điều tôi làm, tôi muốn làm cho nó càng đơn giản càng tốt. Vì vậy, chỉ có 3 thành phần đã được sử dụng. Hãy làm theo và chúng ta hãy
Cách biến điện thoại di động LG EnV 2 của bạn thành một Modem quay số di động cho máy tính xách tay (hoặc máy tính để bàn) của bạn: 7 bước
Cách biến điện thoại di động LG EnV 2 của bạn thành một Modem quay số di động cho máy tính xách tay (hoặc máy tính để bàn) của bạn: Tất cả chúng ta đều có nhu cầu sử dụng Internet ở những nơi không thể, chẳng hạn như trong ô tô hoặc trong kỳ nghỉ, nơi họ tính một khoản tiền đắt đỏ mỗi giờ để sử dụng wifi của họ. cuối cùng, tôi đã nghĩ ra một cách đơn giản để