Real time taking pictures with different exposure times and automatically with OpenCV

958 views Asked by At

I'm trying to make a python program with OpenCV, which opens the webcam and takes several images with different exposures in real time (40ms,95ms,150ms) and averages them in the end. I tried to create a loop in which I change the exposure time, update the rendering (frame) and save it in a list, but the problem is that the display remains static and the rendering hardly changes (which gives after merging the images an image whose exposure time is almost 40)

I supposed that after setting exposure time, the frame update needs some time so I added the method time.sleep to suspend the execution for 3 seconds, but it was in vain.

Here is my code

import numpy as np
import cv2
import os
import time

capture = cv2.VideoCapture(0, cv2.CAP_V4L2)

while True:
    (grabbed, frame) = capture.read()

    if not grabbed:
        break

    # Resize frame
    width = 1500
    height = 1000
    dim = (width, height)
    frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
    
    cv2.imshow('RGB', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

    if cv2.waitKey(1) == ord('h') or cv2.waitKey(1) == ord('H'):
        #repertory = input("Enter the name of the directory: ")
        if not os.path.exists(repertory):
            os.mkdir(repertory)
        exposure = [40,95,150]
        ims = []
        for i in exposure:
            capture.set(cv2.CAP_PROP_EXPOSURE, i) # Setting Exposure
            (grabbed, frame) = capture.read() # Updating frame
            if grabbed:
                cv2.imshow('RGB', frame) #Display
                ims.append(frame)


        # Convert to numpy
        ims = np.array([np.array(im) for im in ims])
        # average et conversion en uint8
        imave = np.average(ims, axis=0)
        imave = imave.astype(np.uint8)

        # image HDR
        cv2.imwrite(repertory + '/' + repertory + '_HDR8.jpg', imave)


capture.release()
cv2.destroyAllWindows()

Is there an optimal solution that allows to take pictures with differents exposure time in real time and in an automatic way?

0

There are 0 answers