Ресайз видео в PyQt5 (OpenCV)
Мне нужно, чтобы видео изменяло размеры от размеров самого окна. Видео проигрывается в лэйбле, которому стоит правило на заполнение. Но при уменьшении окна видео просто обрезается. Можно ли этого избежать уменьшая само разрешение видео динамически (не запрещая на абсолютный минимайз) Ниже код функции воспроизведения и правил размеров (без них тоже работает)
def video_stream(self):
ret, frame = self.video_capture.read()
if not ret:
return False
video_width = int(self.video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(self.video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
screen_rect = app.desktop().screenGeometry()
video_width = (screen_rect.width() if video_width > screen_rect.width() else video_width)
video_height = (screen_rect.height() if video_height > screen_rect.height() else video_height)
self.video_size = QtCore.QSize(video_width, video_height)
frame = cv2.resize(frame, (self.video_size.width(), self.video_size.height()), interpolation = cv2.INTER_AREA)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = qimage2ndarray.array2qimage(frame)
self.frame_lable.setPixmap(QtGui.QPixmap.fromImage(image))
Ответы (1 шт):
Автор решения: Freely
→ Ссылка
Всё решилось очень просто
frame = cv2.resize(frame, (self.frame_lable.size().width(), self.frame_lable.size().height()), interpolation = cv2.INTER_AREA)
Теперь для ресайза берутся значения размеров виджета
Также для виджета стоит правило
self.frame_lable.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)