0

I'm currently using OpenCV 4.5.1 and python 3.8.5. I want to plot the pixel value from each frame in my live video (using laptop webcam) to the value-time graph. But I don't know how to get the timestamp properly. I already try to use CAP_PROP_POS_MSEC, but it never starts from 0 ms. Right from the start, it showing me some big numbers like 8368000.67 , 8368036.64 , 8368068.64 (the rest is shown below). It just confuses me to evaluate the graph in millisecond intervals. I know that I can subtract all timestamps with 8368000.67 to get zero-based timestamp, but it just adds extra work to my machine. Other solutions like using the frame count (CAP_PROP_POS_FRAMES or CAP_PROP_FRAME_COUNT) just returning me -1 for some reason. Any thought to address this problem? Any bits of help are appreciated.

here's my source code

import cv2 as cv

# Open Camera and start streaming
cap = cv.VideoCapture(0)

if not cap.isOpened():
    print("Cannot open camera")
    exit()
    
while True:
    # Capture frame-by-frame
    ret, frame = cap.read()
    
    # if frame is read correctly ret is True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    
    fps          = cap.get(cv.CAP_PROP_FPS)
    milliseconds = cap.get(cv.CAP_PROP_POS_MSEC)
    posFrames    = cap.get(cv.CAP_PROP_POS_FRAMES) 
    frameCount   = cap.get(cv.CAP_PROP_FRAME_COUNT)
    
    print("fps: ",end="")
    print ('%.2f'%fps)
    print("milliseconds: : ",end="")
    print ('%.2f'%milliseconds)
    print("posFrames: ",end="")
    print ('%.2f'%posFrames)
    print("frameCount: ",end="")
    print ('%.2f'%frameCount)
    
    # Display the resulting frame
    cv.imshow("frame", frame)
        
    if cv.waitKey(1) == ord('q'):
        break
        
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()

And the result showing this

  • fps: 30.00
  • milliseconds: : 8368000.67
  • posFrames: -1.00
  • frameCount: -1.00
  • fps: 30.00
  • milliseconds: : 8368036.64
  • posFrames: -1.00
  • frameCount: -1.00
  • fps: 30.00
  • milliseconds: : 8368068.64
  • posFrames: -1.00
  • frameCount: -1.00
  • fps: 30.00
  • milliseconds: : 8368100.60
  • posFrames: -1.00
  • frameCount: -1.00
  • fps: 30.00
  • milliseconds: : 8368136.62
  • posFrames: -1.00
  • frameCount: -1.00
  • fps: 30.00
  • milliseconds: : 8368168.62
  • posFrames: -1.00
  • frameCount: -1.00
  • And if this relevant, I'm currently using Pop_OS! 20.4 NVidia – yonatan_song Mar 25 '21 at 09:10
  • "it just adds extra work to my machine": are you serious ? You are processing dozen million pixels per second and you would moan for a FP subtraction ? By the way, using alternative OpenCV features/modes could be more costly than that mere subtraction, you don't know (this is not necessarily measurable). –  Mar 25 '21 at 10:22
  • considering of next process in my project, I just want to eliminate unnecessary tasks right from the start. But from your response, I guess it's clear enough. Simple subtraction it is. Thank you for your response – yonatan_song Mar 25 '21 at 18:06

0 Answers0