5

Tôi cần phát hiện và theo dõi chuyển động mạnh mẽ trong khung video của web cam. Nền luôn giống nhau. Mục đích là để xác định vị trí của đối tượng, nếu có thể mà không có bóng tối, nhưng không quá khẩn cấp để loại bỏ bóng tối. Tôi đã thử thuật toán opencv cho phép trừ nền và làm tròn, nhưng điều này chỉ phụ thuộc vào một hình ảnh làm nền, nếu nền thay đổi một chút về độ sáng (hoặc tự động lấy nét), tôi cần thuật toán mạnh thay đổi nhỏ như độ sáng hoặc bóng tối.Phát hiện chuyển động Opencv với theo dõi

Trả lời

3

Phương pháp mạnh mẽ để theo dõi là một phần của lợi ích nghiên cứu rộng đang được phát triển trên toàn thế giới ... Đây có thể là chìa khóa để giải quyết vấn đề của bạn rất thú vị nhưng rộng và mở.

Đầu tiên, rất nhiều trong số chúng giả định độ chói độ sáng (do đó những gì bạn yêu cầu khó đạt được). Ví dụ:

  • Lucas-Kanade
  • Horn-SCHUNK
  • Block-phù hợp với

được sử dụng rộng rãi để theo dõi nhưng giả kiên trì độ sáng.

những thú vị Sau đó khác có thể được meanshift hoặc theo dõi camshift, nhưng bạn cần một phép chiếu để làm theo ... Tuy nhiên bạn có thể sử dụng một back-chiếu tính phù hợp để ngưỡng nhất định để phù hợp với nhu cầu của bạn cho vững mạnh ...

Tôi sẽ đăng sau đó về điều đó, Julien,

3

Khi bạn cố gắng làm nổi bật trong OpenCV, bạn có làm điều này với các định dạng màu RGB (đỏ, lục, lam) hoặc HSV (màu sắc, độ bão hòa, giá trị) không? Từ kinh nghiệm cá nhân, tôi thấy mã HSV vượt trội hơn nhiều để theo dõi các đối tượng màu trong cảnh quay video khi được sử dụng kết hợp với OpenCV cho thresholding và cvBlobsLib để xác định vị trí đốm màu.

HSV dễ dàng hơn vì HSV có lợi thế là chỉ phải sử dụng một số duy nhất để phát hiện màu (“màu sắc”), mặc dù xác suất rất thực tế là có nhiều sắc thái của màu đó, từ ánh sáng tới màu tối hơn. (Số lượng màu và độ sáng của màu sắc được xử lý bởi các tham số “bão hòa” và “giá trị” tương ứng).

Tôi ngưỡng hình ảnh tham khảo HSV ('imgHSV') để có được một nhị phân (đen và trắng) hình ảnh sử dụng một cuộc gọi đến cvInRange() OpenCV API:

cvInRangeS(imgHSV, 
      cvScalar(104, 178, 70 ), 
      cvScalar(130, 240, 124), 
      imgThresh); 

Trong ví dụ trên, hai Các tham số cvScalar là giới hạn dưới và trên của các giá trị HSV đại diện cho các sắc màu có màu xanh lam. Trong các thí nghiệm của riêng tôi, tôi có thể thu được một số giá trị tối đa/tối thích hợp bằng cách chụp ảnh màn hình của đối tượng, tôi quan tâm đến việc theo dõi và quan sát các loại giá trị màu/độ bão hòa/lum xảy ra.

Mô tả chi tiết hơn với mẫu mã có thể được tìm thấy trên số blog posting này.

1

Andrian có một hướng dẫn mát http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

Tôi đi theo và có một bài kiểm tra thí nghiệm tốt https://youtu.be/HJBOOZVefXA

tôi sử dụng hình ảnh tĩnh cũng

frameDelta = cv2.absdiff(firstFrame, gray) 
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1] 
thresh = cv2.dilate(thresh, None, iterations=2) 
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, 
cv2.CHAIN_APPROX_SIMPLE) 

4 dòng mã tìm chuyển động cũng chúc may mắn

Các vấn đề liên quan