Reputation: 1
Details:
I have been trying to fix the light exposure of my USB Web Camera (ELP-USB8MP02G-L75).
Through opencv I was able to deactivate auto-exposure (cv::CAP_PROP_AUTO_EXPOSURE
) and set the exposure (cv::CAP_PROP_EXPOSURE
) to a fixed value. However, I notice that if I open the web-camera using Windows default camera app, auto-exposure will always be set to on automatically and dinamically change the exposure value. My opencv program when executed can just overwrite the value and set auto-exposure to false. However, I still get two completelly different images for the same camera properties parameters, there are still big differences in light exposition after fixing all of these values:
Image 1: Exposure: -7 Image 2: Exposure: -7
All of the parameters in DirectShow are exactly the same (cv::VideoCaptureProperties
). But, the images look completely different. I know that auto-exposure changes the Exposure-Time(Shutter speed) and the Gain, however none of these parameters as changed. The issue lies in what Low light compensation on windows default camera app is actually doing/changing.
After researching a little bit more, I realise that the gain from DirectShow and VideoCaptureProperties (cv::CAP_PROP_GAIN
) is the digital gain (post processing), and that the camera also has an analogue gain, according to the datasheet of the Camera Sensor (Sony IMX179QQH5-C)
So the two images above, have everything the same, exposure value, auto-exposure off, digital gain, but have a different analogue gain. So my goal is to access this analogue gain, which so far I was not able to access.
What I already tried:
I explored all of opencv Video Capture Properties but I did not find any property related to exposure or analogue gain than the ones I already tried.
I started to explore Windows Media Foundation and access kernel properties, such as KSPROPERTY_CAMERACONTROL_EXPOSURE
. I found that property MF_CAPTURE_METADATA_ISO_GAINS
is most likely and I am looking for but this is a metadata property (I cannot set) but still was not able to get any value out of it.
I know that libcamera library supports this but for my understanding this only works for Linux based OS.
I already contacted the camera manufacturers, but they were unable to help me
Before delving into some of these frameworks, I would like to know if any of this is really possible or not.
Upvotes: 0
Views: 222