Tôi có thể tải khung hình từ webcam của mình bằng cách sử dụng OpenCV bằng Python. Ví dụ chuyển hướng gần với những gì tôi muốn, nhưng tôi không muốn can thiệp của con người để xác định đối tượng. Tôi muốn lấy điểm trung tâm của tổng số điểm ảnh đã thay đổi trong quá trình nhiều khung, tức là trung tâm của đối tượng chuyển động.Làm cách nào để theo dõi chuyển động bằng OpenCV bằng Python?
Trả lời
Tôi đã có một số mã làm việc dịch từ phiên bản C mã được tìm thấy trong các bài viết trên blog Motion Detection using OpenCV:
#!/usr/bin/env python
import cv
class Target:
def __init__(self):
self.capture = cv.CaptureFromCAM(0)
cv.NamedWindow("Target", 1)
def run(self):
# Capture first frame to get size
frame = cv.QueryFrame(self.capture)
frame_size = cv.GetSize(frame)
color_image = cv.CreateImage(cv.GetSize(frame), 8, 3)
grey_image = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 1)
moving_average = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_32F, 3)
first = True
while True:
closest_to_left = cv.GetSize(frame)[0]
closest_to_right = cv.GetSize(frame)[1]
color_image = cv.QueryFrame(self.capture)
# Smooth to get rid of false positives
cv.Smooth(color_image, color_image, cv.CV_GAUSSIAN, 3, 0)
if first:
difference = cv.CloneImage(color_image)
temp = cv.CloneImage(color_image)
cv.ConvertScale(color_image, moving_average, 1.0, 0.0)
first = False
else:
cv.RunningAvg(color_image, moving_average, 0.020, None)
# Convert the scale of the moving average.
cv.ConvertScale(moving_average, temp, 1.0, 0.0)
# Minus the current frame from the moving average.
cv.AbsDiff(color_image, temp, difference)
# Convert the image to grayscale.
cv.CvtColor(difference, grey_image, cv.CV_RGB2GRAY)
# Convert the image to black and white.
cv.Threshold(grey_image, grey_image, 70, 255, cv.CV_THRESH_BINARY)
# Dilate and erode to get people blobs
cv.Dilate(grey_image, grey_image, None, 18)
cv.Erode(grey_image, grey_image, None, 10)
storage = cv.CreateMemStorage(0)
contour = cv.FindContours(grey_image, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)
points = []
while contour:
bound_rect = cv.BoundingRect(list(contour))
contour = contour.h_next()
pt1 = (bound_rect[0], bound_rect[1])
pt2 = (bound_rect[0] + bound_rect[2], bound_rect[1] + bound_rect[3])
points.append(pt1)
points.append(pt2)
cv.Rectangle(color_image, pt1, pt2, cv.CV_RGB(255,0,0), 1)
if len(points):
center_point = reduce(lambda a, b: ((a[0] + b[0])/2, (a[1] + b[1])/2), points)
cv.Circle(color_image, center_point, 40, cv.CV_RGB(255, 255, 255), 1)
cv.Circle(color_image, center_point, 30, cv.CV_RGB(255, 100, 0), 1)
cv.Circle(color_image, center_point, 20, cv.CV_RGB(255, 255, 255), 1)
cv.Circle(color_image, center_point, 10, cv.CV_RGB(255, 100, 0), 1)
cv.ShowImage("Target", color_image)
# Listen for ESC key
c = cv.WaitKey(7) % 0x100
if c == 27:
break
if __name__=="__main__":
t = Target()
t.run()
Nhận một số video về nó tại http://appdelegateinc.com/blog/2010/08/02/motion-tracking-with-a-webcam/ –
Cảm ơn bạn cho mã của bạn. Nó hoạt động, và nó có thể phát hiện tất cả các đối tượng chuyển động. Tuy nhiên, nó không thể theo dõi đối tượng chuyển động. Có cách nào tốt hơn để theo dõi đối tượng chuyển động không? Tôi đang tính toán trung tâm của mỗi đường bao, có thể so sánh vị trí thay đổi giữa 2 khung hình, nhưng phần cứng là, nếu có nhiều đường viền trong một khung, và có rất gần, thật khó để nói cho một đường viền, là đường viền tiếp theo trong khung tiếp theo. – qkzhu
Đã một thời gian kể từ khi tôi sử dụng OpenCV, nhưng tôi nhớ lại bằng cách sử dụng bản trình diễn đi kèm với nguồn, nơi bạn kéo một hình vuông xung quanh một đối tượng bằng chuột để theo dõi. Nó lấy biểu đồ màu của vùng lựa chọn và tìm kiếm nó. Tôi tin rằng đó là đoạn mã này: https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/python/camshift.py?rev=2136 –
Xem bài đăng trên diễn đàn Motion tracking using OpenCV.
Tôi tin rằng bạn có khả năng đọc và dịch mã nguồn thành Python, phải không?
tôi sẽ cung cấp cho nó một thử và cho bạn biết. –
Tôi đã chuyển đổi nó sang Python, nhưng tôi e rằng tôi nhận được cùng một điểm mỗi lần sau khi gọi CalcOpticalFlowPyrLK. Bất kỳ ý tưởng? Đây là mã của tôi: http://friendpaste.com/7lM9Cmiyif1fIVwrgKBJnG –
if faces:
for ((x, y, w, h), n) in faces:
pt1 = (int(x * image_scale), int(y * image_scale))
pt2 = (int((x + w) * image_scale), int((y + h) * image_scale))
ptcx=((pt1[0]+pt2[0])/2)/128
ptcy=((pt1[1]+pt2[1])/2)/96
cv.Rectangle(gray, pt1, pt2, cv.RGB(255, 0, 0), 3, 8, 0)
print ptcx;
print ptcy;
b=('S'+str(ptcx)+str(ptcy));
Đây là một phần của mã tôi đã cố gắng để có được trung tâm đối tượng chuyển động khi được theo dõi bằng ranh giới hình chữ nhật.
Liên kết sau theo dõi các phương tiện di chuyển cũng như đếm chúng. Nó dựa trên OpenCV và được viết bằng Python 2.7.
OpenCV and Python
- 1. Theo dõi OpenCV bằng luồng quang
- 2. theo dõi góc android bằng cách sử dụng opencv
- 3. Phát hiện chuyển động Opencv với theo dõi
- 4. opencv - theo dõi đối tượng bằng cách sử dụng tính năng phát hiện
- 5. Theo dõi chuyển động và theo dõi Blob
- 6. Làm thế nào bạn có thể theo dõi chuyển động bằng camera của iPhone?
- 7. Cách theo dõi elasticsearch bằng nagios
- 8. Chuyển động Robot bằng Python
- 9. Cách theo dõi mắt bằng Kinect SDK?
- 10. Làm cách nào để theo dõi cookie hoạt động?
- 11. Cách xoay video bằng OpenCV
- 12. Làm thế nào để cắt một hình ảnh trong OpenCV bằng cách sử dụng Python
- 13. Làm cách nào để theo dõi người dùng Caps Lock bằng Google Analytics?
- 14. Làm thế nào để theo dõi quá trình con bằng cách sử dụng strace?
- 15. Tôi làm cách nào để theo dõi sự kiện bằng Firebug?
- 16. Theo dõi flexitime bằng Emacs (& org-mode)
- 17. Theo dõi video bằng cách sử dụng Theo dõi sự kiện GA
- 18. Theo dõi chuyển hướng và cookie với Python
- 19. cách theo dõi làm mới meta trong Python
- 20. Cách sửa đổi theo dõi chuyển động trong AS3
- 21. cách theo dõi người dùng bằng websocket ++ 0.3X
- 22. OpenCV PCA Tính toán bằng Python
- 23. Tôi làm cách nào để theo dõi người dùng twitter bằng cách sử dụng khung công tác Twitter4j?
- 24. Tạo video bằng OpenCV 2.4.0 trong python
- 25. Làm thế nào để biên dịch OpenCV bằng libjpeg-turbo?
- 26. Cách theo dõi vị trí của người dùng bằng MapKit
- 27. Làm thế nào để chuyển một biến theo tên cho một Chủ đề bằng Python?
- 28. Chuyển đổi bằng Python
- 29. Cách theo dõi chuyển hướng trong firefox?
- 30. Theo dõi vận tốc của chế độ xem chuyển động
http://stackoverflow.com/questions/3374422/how-do-i-track-a-blob-using-opencv-and-python cho câu hỏi bối cảnh –