Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How to set and get brightness of camera using PyQt

Hi, I have been trying to set and get brightness value of webcam when i press button. I want to set brightness then read it. When i read brightness it prints 0.0 which is not the actual value. And set_brightness has no effect

Here is my full code

main.py

from PyQt5.QtWidgets import QApplication
from views import UI_Window
from models import Camera

if __name__ == '__main__':

    camera = Camera(0)
    app = QApplication([])
    start_window = UI_Window(camera)
    start_window.show()
    app.exit(app.exec_())

models.py

import cv2


class Camera:

    def __init__(self, cam_num):

        self.cap = cv2.VideoCapture(cam_num)
        self.cam_num = cam_num

    def open(self, width=640, height=480, fps=30):
        self.cap.set(5, fps)  #set FPS
        self.cap.set(3, width)  
        self.cap.set(4, height)
        return self.cap.isOpened()

    def read(self):
        rval, frame = self.cap.read()
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        return frame

    def get_brightness(self):
        return self.cap.get(cv2.CAP_PROP_BRIGHTNESS)

    def set_brightness(self, value):
        self.cap.set(cv2.CAP_PROP_BRIGHTNESS, value)

views.py

from PyQt5.QtCore import QThread, QTimer
from PyQt5.QtWidgets import QLabel, QWidget, QPushButton, QVBoxLayout, QApplication, QHBoxLayout, QMessageBox,  QMainWindow
from PyQt5.QtGui import QPixmap, QImage
from models import Camera


class UI_Window(QWidget):

    def __init__(self, cam_num):
        super().__init__()
        self.cam_num = cam_num
        self.cam_num.open()
        # Create a timer.
        self.timer = QTimer()
        self.timer.timeout.connect(self.nextFrameSlot)
        self.timer.start(1000. / 24)
        layout = QVBoxLayout()
        button_layout = QHBoxLayout()
        btnCamera = QPushButton("Print Brightness")
        btnCamera.clicked.connect(self.print_brightness)
        button_layout.addWidget(btnCamera)
        layout.addLayout(button_layout)
        # Add a label
        self.setLayout(layout)

    def nextFrameSlot(self):
        frame = self.cam_num.read()
        if frame is not None:
            image = QImage(frame, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
            self.pixmap = QPixmap.fromImage(image)

    def print_brightness(self):
         self.cam_num.set_brightness(0.5)
         print(self.cam_num.get_brightness())