OpenCV Tutorial: Real-Time Object Tracking Without Colour

Share
Embed
  • Published on Jan 28, 2014
  • Found this video useful? Donations are very much appreciated, thank you.
    PayPal: www.paypal.com/cgi-bin/webscr?cmd=_donations&business=X24GRDPJ4PZHW&lc=CA&item_name=OpenCV%20Tutorials&currency_code=CAD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
    BTC: 18Hysn4veDCCkhKtkqBiigJ8HfhjkzWDta
    Ethereum: 0x97267a8d15d35012FaA9B07be4ac5Ff935876E10
    Business Inquiries and Tutoring rates email kyle.hounslow@gmail.com
    In this tutorial we will look at real-time object tracking using the method of sequential images. This allows us to track objects without the use of colour filtering. We code in C++ using Visual Studio 2010.
    Start by downloading the following zip file: www.dropbox.com/s/qhkwml7cu75lar2/motionTrackingTutorial.zip?dl=0
    If you got stuck anywhere in this tutorial you can download the final source code from here:
    www.dropbox.com/s/67gtew15zn2rpun/motionTracking.cpp?dl=0

Comments • 239

  • David Duarte
    David Duarte 2 months ago +1

    2019 and this is the best object tracking tutorial i have found so far! Thank you very much, great video!

  • Dr. Ömür GÜNALDI
    Dr. Ömür GÜNALDI 3 months ago

    Congragulation Kyle Hounslow. How can I show position of 3D objects while tracking?

  • omkaram rangasesha
    omkaram rangasesha 7 months ago

    please
    anybody can help me to multiple objects and not by using the filtered color for multiple object like apple,cheery example of his videos

  • Nisa Ulfahayati
    Nisa Ulfahayati 7 months ago

    thanks very much Kyle, it helped me a lot. I'm still watch it on 2018. LOL

  • zultan dimitry
    zultan dimitry 9 months ago

    im looking for the same but in python do you know were i can get the code ?

  • Sami Ullah Shah
    Sami Ullah Shah Year ago

    really impressive, i am trying to use your logic but in c#. if you have any clue then you can share with me thanks.

  • ravinder rikhi
    ravinder rikhi Year ago

    Getting this error when trying to access my webcam using OpenCv. Can anybody help ?
    GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed

  • Mike BORYS
    Mike BORYS Year ago

    Thanks Kyle, everybody knows how to reduce the delay?

  • Anas Ait Aomar
    Anas Ait Aomar Year ago

    Hi ,i really enjoy your videos i'm new to opencv and c++ ,i've used your code and i want to store this cordinates in a text file

  • ADEEL MUHAMMAD
    ADEEL MUHAMMAD Year ago

    I want to use ZED camera, may you guide me how to connect ZED stereo vision
    camera with this code?

    • Rebeccah Kahn
      Rebeccah Kahn 8 months ago

      This is what I want to do! Except I would be using a stereo rig with 2 GoPro Heros. ZED cameras have SDK, perhaps find some research on C++ coding for SDK compatibility?

  • Sweta Dwivedi
    Sweta Dwivedi Year ago

    I love your teaching style. Organized material and easy to follow! Subscribed.

  • Trần Bảo Long

    thank you so much for these videos tutorial

  • Simon Prell
    Simon Prell Year ago

    Hi is IT possibe to use this when the camera is moving ?

  • ibrahim ethem gürsoy

    This is my code:
    github.com/iegrsy/Object-Counting
    Good luck..

  • Trương Lê Văn

    If some one want to detect human and control camera tracking come to see my video and get the source code: ru-clip.net/video/TYfssug9PYY/video.html

  • noob code
    noob code 2 years ago

    sir,please add so that cout and cin could work. :)

  • Cliff Batalla
    Cliff Batalla 2 years ago

    When i click "t" the program stops but doesn't display any build problems
    debug mode is working when "d" is pressed

  • Suhadra Pattra
    Suhadra Pattra 2 years ago

    bro , is your source code just for tracking a ball ? or it can track other objects base on the database you input to the code ?

  • epiclapser
    epiclapser 2 years ago

    +Kyle Hounslow
    So apparently eroding the output of the absdiff function before passing it through the blur reduces allot of noise. My webcam has allot of noise in its image so if anyone else is trying to write this code with a crappy webcam just erode before the blur.

  • Mohamed Aouled Issa
    Mohamed Aouled Issa 2 years ago

    I have implemented your code and I came up with a quick fix to get only one object (tennis ball) after thresholding. The trick is to substract grayImage1 from grayImage2 (grayImage2-grayImage1) before thresholding which means that the differenceImage should be : differenceImage = grayImage2-grayImage1;
    This will produce only one ball in the frame.
    Thanks

  • SadKo2U
    SadKo2U 2 years ago +2

    Hey Kyle! The link is not working! Where could I get the code?

    • Kyle Hounslow
      Kyle Hounslow  2 years ago +1

      Hi @SadKo2U, The links are now updated. My apogolies!
      Kyle

  • sahar alaa
    sahar alaa 2 years ago

    thank you very much for your effort ^_^

  • Hassan Fida
    Hassan Fida 2 years ago

    Hi Mr Kyle! Can you please provide me your email so I may ask you some questions

  • Enrique Ortiz
    Enrique Ortiz 2 years ago

    hello, great tutorial, I tried runnin git, but got the following error:
    file f:\\dd\vctools\crt\crtw32\convert\isctype.c
    line: 68
    Expression: c>=-1&&C

  • Muhd Azrin Yusof
    Muhd Azrin Yusof 2 years ago

    Hi, can i have your email ? Need something urgent to discuss

  • alireza ghaderi
    alireza ghaderi 2 years ago

    Great Man it was great...
    you have any idea for moving camera? i want to have a moving camera forexample on a UAV and then detect car motions from high altitude.

    • Saad Uzair
      Saad Uzair 2 years ago

      you got your answer for moving camera ?
      if you get it it please let me know. i got stucked in the same case

  • نٌےـوِنٌےـٱيّےـة ИÂИØṩĦÂ

    hello^^
    ,,my project this year about object track with opencv+image processing
    so,i need some help
    can you help me?
    just give me the resourses such as book,sites,etc about how i can dealing with object track!!

  • Dmitry Fatiev
    Dmitry Fatiev 2 years ago

    I don't know if you still answer the comments here, but - what if I have moving people in the frame as well? They won't occlude the ball when it's position matters, but what would you recommend to disregard any undesired "diff" artifacts?

    • Maurizio Ingrassia
      Maurizio Ingrassia 2 years ago

      Indeed this solution (like the 99% of the youtube video) is not robust. Any minimal light condition change would screw everything

  • nihat nihat
    nihat nihat 2 years ago

    Hi there,
    I trying to do this project as I am watching your tutorial step by step but I am stuck at adding existing property sheet the file called 'OPENCV_DEBUG247' . I could not get it anywhere. Could you share it with me by any chance?
    Best Regards,

    • SnowySeraph
      SnowySeraph 2 years ago

      He builds it in another one of his tutorial videos. He basically assumes you watch all of them in order.

  • q zorn
    q zorn 2 years ago

    i have watched this video before and like it even better now with some opencv experience. it would be great to run a python version of your code on the raspberry pi 3. thanks.

  • Naveen Pathirana
    Naveen Pathirana 2 years ago

    Warning:Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:537) .... please help me

    • Aarjav Khara
      Aarjav Khara 2 years ago +1

      try
      #include "opencv2/highgui/highgui.hpp"

  • manvstaco
    manvstaco 2 years ago +2

    holy cow I got it working on all the new releases :D Haven't programmed in years thank you much!

  • Fadli FM
    Fadli FM 3 years ago

    awesome tutorial :) just started learn opencv and i love this tutorial for detail explanation :) great job sir :) make more tutorial and surely ill watch and comment your vid :D

  • Jesus Soberon
    Jesus Soberon 3 years ago

    Hi Kyle. Many thanks for your video tutorials on Object tracking using opencv. Your explanation is very detailed. Im starting on computer vision, and your tutorials are very usefull. Again, many thank Amigo! saludos

  • Carlos E Freitas
    Carlos E Freitas 3 years ago +2

    Thanks for the tutorial. Can I ask you if would be possible to do the same using OpenCV in Linux ? I´m planning to do something like this using a Raspberry Pi3, by now I got some Face detection working, but its terribly slow. I must fond a way of follow objects moving on live video feed.
    Once again, thankyou for your inspiring work.

    • Abdallah Hegab
      Abdallah Hegab Year ago

      so did it work with python

    • noob code
      noob code 2 years ago

      yes sir,you can use openCV in linux(i am a user of ubuntu 16.04).it's quite easy and fast. thankyou

    • Sarvesh Thakur
      Sarvesh Thakur 2 years ago

      Yes. You can use Python(or C++) + OpenCV on Raspberry Pi

    • Naveen Pathirana
      Naveen Pathirana 2 years ago

      that's the same question also I have .... Did you have a answer for this question

  • Per Malmstedt
    Per Malmstedt 3 years ago +1

    Just started studying object tracking for a new project and stumbled on your tutorial. I love your detailed explanation and the fact that you just don't assume a lot of knowledge about the tools used. I will for sure try to undersand the CV library, and watch all tutorials I can find that you have made. I am way more fluent in C# but I guess there is no rapper for OpenCV out there..
    Again, thanx!

    • Kelvin Wekesa
      Kelvin Wekesa 2 years ago

      hello, where are your zip files the link does not display on my video

    • Kyle Hounslow
      Kyle Hounslow  3 years ago +1

      Glad you've taken an interest in Computer Vision and thanks for watching!
      There actually is a very nice wrapper for OpenCV named EmguCV.
      Head over to Chris Dahms' RU-clip page for some excellent tutorials on EmguCV ru-clip.net/user/18F4550videos
      Thanks,
      Kyle

  • John Christian
    John Christian 3 years ago

    Hey Kyle, Thank you so much for this amazing program. We really appreciate programmers like you, who really help other programmers out and also the beginners. I really need a little bit of help tho. How can I make this program run using OpenCV 3.1.0 ? Any info would really help. Thank you so much man.

  • kestha ravali
    kestha ravali 3 years ago

    thank you so much for the video and please help me how to stop the loop of the video and instead of tracking the the positions how can we draw a rectangle around the object detected please help me

  • twilighttucson
    twilighttucson 3 years ago

    Thank you for the indepth tutorial! After this final project you'll be sure to get a donation! Alot of this information has saved my skin. Albeit, working on the python side of Opencv.
    Thanks again.

  • kadir çağrı ÜNAL
    kadir çağrı ÜNAL 3 years ago

    hey kyle firstly,i want to thank you for your helpful tutorial videos.But i have a problem when i try to debug this program visual studio gives me this error '1>LINK : fatal error LNK1104: cannot open file 'MSVCP120D.dll'' and also it says that can not find MSVCR120D.dll what should i do please help me.

  • Razvan Has
    Razvan Has 3 years ago

    Thank you very much for the great tutorial. Keep up the good work!

  • Prasanna Routray
    Prasanna Routray 3 years ago +1

    Hey Kyle,
    is it possible for you to create a tutorial for object tracking using only depth images and not color/RGB images? like you are doing here with RGB image.
    Waiting for your reply.
    Thanks
    regards,
    Prasanna

  • Schmuck
    Schmuck 3 years ago

    To anyone getting an error "Sizes of input arrays do not match", use this differenceImage = abs(grayImage1 - grayImage2); to calculate the difference image. I'm new to opencv, so don't ask me why the old one doesn't work. I'm going to guess it's depreciated/old

  • Hussam Bedair
    Hussam Bedair 3 years ago

    I'm getting "Debug Assertion Failed!" when i press"t" to tracking ... how can I solve this problem ?? Please Help .

  • TING-YUAN HUANG
    TING-YUAN HUANG 3 years ago

    Thanks for doing this!!
    I'd want to know how write in c# with visual studio?

  • Michael del Rosario
    Michael del Rosario 3 years ago

    Great tutorial! Quick question, is this applicable for a moving camera?

  • Chun Qhai
    Chun Qhai 3 years ago

    Great tutorial ! Thanks you so much!
    One question. Seems like your source codes only work with single moving object, how can I detect multiple moving objects ?

  • ash sal
    ash sal 3 years ago

    how can i get the source code ?

  • tech nician
    tech nician 3 years ago

    What camera do you recommend? I have the beaglebone and like to use it to track objects in the kitchen. If the roommate leaves unclean dishes in the sink, I want it to sms him on his cell phone to clean the kitchen :)

  • tech nician
    tech nician 3 years ago

    Now If I can use it to track my cell phone in my house before it dies then its really useful :)

  • Vikram Gupta
    Vikram Gupta 3 years ago

    Hi Kyle, Thanks for this great tutorial on this very useful application. Works beautifully on my Mac. The fact that you have shared an template to fill while seeing the tutorial, makes learning more hands on.

  • Russell __
    Russell __ 3 years ago

    You are a good teacher. Thanks.

  • Das K
    Das K 3 years ago +1

    Hi Kyle,
    This video is very helpful, I am looking for a solution to track multiple objects (people), is it possible to use the same solution for that if so how ? do I need to use Kalaman filter for that purpose ? pls share your thoughts on this.

  • Đông Quang
    Đông Quang 3 years ago

    Thank you so much ! Amazing solution !

  • PhonicUK
    PhonicUK 3 years ago +5

    You can get a significant performance boost by instead of capturing two frames from the camera each loop iteration, you actually just capture into the 'first' buffer, do all the work, then copy the 'first' buffer into the 'second' buffer at the end. That way you're comparing a sliding window of 2 consecutive frames instead of fixed pairs.

  • HARSH MUNSHI
    HARSH MUNSHI 3 years ago

    Can it track multiple objects?

    • Fathima Khalid
      Fathima Khalid 3 years ago

      +Ghassem Tofighi thanks a lot for your immense guide.
      I went through those links. It is very useful for 3D tracking.
      Can you suggest me some methods to track 2D cartoon objects?

    • Ghassem Tofighi
      Ghassem Tofighi 3 years ago

      I've written some guides here, not completely what you are looking for, but maybe useful:
      stackoverflow.com/questions/32946097/openni-human-tracking-from-the-ceiling-with-asus-xtion-pro/32975177#32975177

    • Fathima Khalid
      Fathima Khalid 3 years ago

      Could you please guide me to implement it in c++?

    • Fathima Khalid
      Fathima Khalid 3 years ago

      +HARSH MUNSHI thanks a lot

    • HARSH MUNSHI
      HARSH MUNSHI 3 years ago

      Yes it is able to, it'll take some effort to convert it to C++. Since my platform supports python I used it

  • Hoàng Đạt Lê
    Hoàng Đạt Lê 3 years ago +2

    Hi, thanks for your video.
    but I encountered some problems, i can't see OPENCV_DEBUG (Project Property file). Can you help me this problems?
    thank you!

  • michael mcgowan
    michael mcgowan 4 years ago

    Kyle I have a few questions about a project that I have been working on for years and I could really use some advice about how to apply this type of tracking to it. Can I contact you through phone are email?

  • Claude Pageau
    Claude Pageau 4 years ago +1

    Well I found your tutorial very informative. I used your technique to write a Raspberry Pi, picamera, opencv motion tracking program written in python. It is not quite as fast as your demo but good enough. This program is a vehicle speed camera that records speed data in a log and speed photo with overlayed text. Anyway thanks for your excellent Tutorial and code walkthrough. Here is a link to my RU-clip video. ru-clip.net/video/eRi50BbJUro/video.html
    code is on github doc here github.com/pageauc/motion-track/blob/master/speed-track/speed_track.md

  • EL KASRI Zakaria
    EL KASRI Zakaria 4 years ago +3

    I'm getting "Debug Assertion Failed!" when i press"t" to tracking, i think that it is from findContours() because the code works without this method. I checked the path, dll files and everything. I'm using VS2013 Express with openCV 2.4.11

    • Max Jensen
      Max Jensen 2 years ago

      Thank you - excatly what solved my problem before with a heap problem! :) - I was looking at this error, since this user had the same error as me, but you solved it. stackoverflow.com/questions/34760254/debug-assertion-failed-opencv-is-block-type-validheader-block-use Emil.

    • Emil Andersson
      Emil Andersson 3 years ago +1

      +nizam ahmed I tried to put my vectors (contours and hierarchy) as Global and it helped :)

    • nizam ahmed
      nizam ahmed 3 years ago

      Hey how did you solve this error of debug assertion error.it would be greatly appreciated if you share your solution

    • SIMuTech
      SIMuTech 3 years ago

      '

    • EL KASRI Zakaria
      EL KASRI Zakaria 3 years ago

      +Izzat Ikhwan Syazri Hasanuddin
      i had some error in lib files, you have to create a new project and ensure that you have the good configuration

  • henhen7890
    henhen7890 4 years ago

    Hey Kyle, I found your videos really helpful. But I noticed you used a different method to track "blobs" in this method than in the color tracking method. I tried using the moments method of locating an object and it does a better job of centering on the object as long as you use a high sensitivity value. The problem I keep running into with findContours is it finds the largest contour and for larger objects they are split too far apart so findContours would just locate the side of the object. I was wondering if you knew how to fix this with something other than blurring, perhaps try generating a circle that uses lets say the top of a persons head. Also do you know how to do manual blob detection without loading something else like SimpleBlobDetector?

  • Renie Well
    Renie Well 4 years ago

    Very helpful! Thank you for your job

  • Manh Do
    Manh Do 4 years ago

    excuse sir! Can I try this on MATLAB?

  • Russ Holt
    Russ Holt 4 years ago

    WOW! - the knowledge i've gained by going through your Tutorials is stunning! well done on so many levels. it seems you've slacked off here - so let's get with it!
    i'm interested in a coupla things:
    1) what is/are the tools you use to create these videos?
    2) going forward... it would be great to be able to merge the tracking of objects found (vector) with color filter. in other words, let's say we're trying to find circles of objects and then after that, check those objects for their color. example tennis balls (sitting or moving) .

  • Lowell Basco
    Lowell Basco 4 years ago

    does anyone tried this code with opencv3.0 and vc++12 ?

    • Hemal Vadgama
      Hemal Vadgama 3 years ago

      +Lowen Bashkar for opencv3.0 in the header add #include

    • Lowell Basco
      Lowell Basco 4 years ago

      I tried using it in vs2010 and opencv2.4.11 and it worked, I wonder what will I "change" in using opencv3.0

    • Lowell Basco
      Lowell Basco 4 years ago

      @Smita Shivaram I'm getting this error:
      1>Source.cpp(54): error C3861: 'findContours': identifier not found
      1>Source.cpp(67): error C3861: 'boundingRect': identifier not found
      1>Source.cpp(79): error C3861: 'circle': identifier not found
      1>Source.cpp(80): error C3861: 'line': identifier not found
      1>Source.cpp(81): error C3861: 'line': identifier not found
      1>Source.cpp(82): error C3861: 'line': identifier not found
      1>Source.cpp(83): error C3861: 'line': identifier not found
      1>Source.cpp(86): error C3861: 'putText': identifier not found
      1>Source.cpp(110): error C2065: 'VideoCapture' : undeclared identifier
      1>Source.cpp(110): error C2146: syntax error : missing ';' before identifier 'capture'
      1>Source.cpp(110): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(116): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(116): error C2228: left of '.open' must have class/struct/union
      1> type is 'unknown-type'
      1>Source.cpp(118): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(118): error C2228: left of '.isOpened' must have class/struct/union
      1> type is 'unknown-type'
      1>Source.cpp(119): error C2065: 'cout' : undeclared identifier
      1>Source.cpp(127): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(127): error C2228: left of '.get' must have class/struct/union
      1> type is 'unknown-type'

    • Lowell Basco
      Lowell Basco 4 years ago

      @Paul Sisneros I'm getting this error:
      1>Source.cpp(54): error C3861: 'findContours': identifier not found
      1>Source.cpp(67): error C3861: 'boundingRect': identifier not found
      1>Source.cpp(79): error C3861: 'circle': identifier not found
      1>Source.cpp(80): error C3861: 'line': identifier not found
      1>Source.cpp(81): error C3861: 'line': identifier not found
      1>Source.cpp(82): error C3861: 'line': identifier not found
      1>Source.cpp(83): error C3861: 'line': identifier not found
      1>Source.cpp(86): error C3861: 'putText': identifier not found
      1>Source.cpp(110): error C2065: 'VideoCapture' : undeclared identifier
      1>Source.cpp(110): error C2146: syntax error : missing ';' before identifier 'capture'
      1>Source.cpp(110): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(116): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(116): error C2228: left of '.open' must have class/struct/union
      1> type is 'unknown-type'
      1>Source.cpp(118): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(118): error C2228: left of '.isOpened' must have class/struct/union
      1> type is 'unknown-type'
      1>Source.cpp(119): error C2065: 'cout' : undeclared identifier
      1>Source.cpp(127): error C2065: 'capture' : undeclared identifier
      1>Source.cpp(127): error C2228: left of '.get' must have class/struct/union
      1> type is 'unknown-type'

    • Smita Shivaram
      Smita Shivaram 4 years ago

      @Lowen Bashkar Hi, were you able to get this working?

  • Naing minhtun
    Naing minhtun 4 years ago

    Thanks a lot Sir :)

  • Milan Patel
    Milan Patel 4 years ago

    thank u some much #KYLE HOUNSLOW ..

  • Sam L
    Sam L 4 years ago

    Cheers Kyle - always nice to find a video as clear as this with source code and resources supplied.

  • farlobeat11
    farlobeat11 4 years ago

    Is this working for more than one item?

  • Rushlene Bakshi
    Rushlene Bakshi 4 years ago +5

    Its a nice video .can u pls repost the source code link?

    • Ilyajob05
      Ilyajob05 9 months ago

      ru-clip.net/video/4ASTeja1UXI/video.html This is a simple program for ball detect

  • topmundial
    topmundial 4 years ago

    todo el proyecto completo por 1 dolar :)

  • Jbl
    Jbl 4 years ago

    Hello, this may be a dumb question but isnt this program just detecting moving objects and not actually tracking?? Wouldnt you need some sort of tracking algorith in order to track the ball?? Great tutorial BTW!

    • Shan Muga
      Shan Muga 3 years ago

      +Gabriel B. Exactly.. I too have that doubt.. It seems to detect object in every frame, thats all. No tracking involved. +Kyle Can you please claify this..

  • Diego Alejandro Gómez Pardo

    Great video and really well explained. Despite I needed just to check how to adapt the motion detection to the camera, I kept watching it till the end.

  • Stefano Sanfilippo
    Stefano Sanfilippo 4 years ago

    Dear Professor Kyle,
    I am an italian student . I am working on the project in human body gesture recognition, I come across your video "OpenCV Tutorial: Real-Time Object Tracking Without Colour" and I found it interesting and relevant. I would like if you could share with me a copy of your programme (my email is stefano.sanfilippo1992@gmail.com).
    That would be much appreciated.
    Yours faithfully
    Stefano Sanfilippo

  • Gaziza20057
    Gaziza20057 4 years ago

    Hi Kyle) Could you help me? I put letter "t" but it does not work( why?