I'm looking for sky camera software with motion detection (for meteors and other objects). The camera is plugged in the computer (using an USB cable) and the software should look at the camera's view and have the following features:

  • Motion detection:
    • When a motion is detected, store a video containing the motion.
    • The camera looks at the entire sky, so the stored video should only show the area containing the moving object.
    • Should not be too sensitive. As the Earth moves, the stars are continuously moving on the sky and this motion should not be stored.
  • Detection of changing colors (for polar light and such):
    • Same as for motion detection, when it detects a change, it should store a video when it detects a color change and that video should only show the area containing the color change.

Freeware is preferred, but software up to 100 USD is OK.

1 Answer 1


While I don't personally know of any specific specialised software that meets your needs I think that you should take a look at OpenCV and see what you can come up with.

  • Free (both gratis and FLOSS)
  • Cross platform: Windows, Linux, Android and Mac OS
  • Multiple programming languages, (C++, C, Python, Java and MATLAB interfaces), so you can use what you are comfortable with or can afford, (N.B. Python & Java are free, GNU have free C++ & C compilers).
  • Motion Detection algorithms built in, (including being able to set thresholds).
  • VideoWriter class to save your results
  • Active user community, (I suspect including some Student/Professional Astronomers)

Example of motion detection in OpenCV in python

This example came from the blog of Matthias Stein.

import cv2

def diffImg(t0, t1, t2):
  d1 = cv2.absdiff(t2, t1)
  d2 = cv2.absdiff(t1, t0)
  return cv2.bitwise_and(d1, d2)

cam = cv2.VideoCapture(0)

winName = "Movement Indicator"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)

# Read three images first:
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)

while True:
  cv2.imshow( winName, diffImg(t_minus, t, t_plus) )

  # Read next image
  t_minus = t
  t = t_plus
  t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)

  key = cv2.waitKey(10)
  if key == 27:

print "Goodbye"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.