Python+OpenCV+pyQt 5 더 블 카메라 동 영상 을 녹화 하 는 인 스 턴 스

원인
말하자면 동 영상 을 녹화 할 때 우 리 는 많은 소프트웨어 가 있 을 수 있 지만 비교적 함정 에 빠 진 것 은 두 개의 카메라 의 동 영상 을 동시에 녹화 할 수 있 는 소프트웨어 지원 이 매우 적은 것 같 아서 우 리 는 python 으로 스스로 하 나 를 썼 다.OpenCV+python 이면쉽게 OK 할 수 있 을 것 같은 데 우리 프로젝트 는 선생님 께 보 여 드 리 는 게 보통 이 잖 아 요.화면 이 없 는 녹화 과정 을 원 하 시 는 분?마지막 으로 소스 코드 를 첨부 하 겠 습 니 다~
의지 하 는 가방
여기 서 저 는 import 의 가방 을 직접 적 었 습 니 다.여러분 은 번 호 를 맞 춰 자리 에 앉 을 수 있 습 니 다.그리고 어떤 가방 을 설치 해 야 하 는 지 알 수 있 습 니 다!

import cv2
import numpy as np
from PyQt5.QtWidgets import (QMainWindow, QApplication, QFileDialog)
import threading
import threadpool 
from CvPyGui import ImageCvQtContainer
from CvPyGui.ui import gui
인터페이스 디자인
pyqt 의 화면 은 designer 로 구 조 를 할 수 있 습 니 다.여 기 는 두 눈 카메라 이기 때문에 우리 가 구 조 된 화면 은 바로 이 모양 입 니 다.

그 중에서 TextLabel 은 그림 을 표시 하 는 데 사 용 됩 니 다.그림 을 업데이트 하 는 코드 는 다음 과 같 습 니 다.

class Image(QWidget):
 """Common base for the images"""

 def __init__(self, name, label):
 super().__init__()

 # Label (frame) where the original image will be located, with scaling
 self.frame_lbl = label

 def updateImage(self, opencv_rgb_image):

 self.cv_img_rgb = opencv_rgb_image

 height, width, channel = self.cv_img_rgb.shape
 bytesPerLine = 3 * width
 self.q_image = QImage(self.cv_img_rgb.data, width,
  height, bytesPerLine, QImage.Format_RGB888)

 self.frame_lbl.setPixmap(QPixmap.fromImage(self.q_image))

 def saveImage(self):
 # Function for saving the processed image

 filter = "Images (*.png *.jpg)"

 image_path, _ = QFileDialog.getSaveFileName(self, filter=filter)

 cv_img_bgr = cv2.cvtColor(
 self.cv_img_rgb, cv2.COLOR_RGB2BGR)
 cv2.imwrite(image_path, cv_img_bgr)
우리 도 영상 이 한 프레임 한 프레임 재생 되 는 것 을 안다.그래서 우 리 는 재생 할 때 사실상 모든 프레임 의 화면 을 업데이트 하고 있다.
OpenCV 동 영상 가 져 오기
OpenCV 로 영상 을 가 져 오 는 것 은 간단 합 니 다.

 cap = cv2.VideoCapture(int(text))
 cap.set(6 ,cv2.VideoWriter_fourcc('M', 'J', 'P', 'G') );
 cap.set(3,w);
 cap.set(4,h);
 global update1
 update1 = 1
 global shotmark1
 ret, frame = cap.read() 
이렇게 하면 한 프레임 의 그림 을 얻 을 수 있 습 니 다.그 중에서 cap.set()함 수 는 카메라 의 인 자 를 설정 하 는 데 사 용 됩 니 다.원래 매크로 정의 가 있어 야 하 는데 python 에서 항상 오 류 를 보고 하고 숫자 로 대 체 했 습 니 다.그 중에서 3 은 영상의 너비 픽 셀 을 얻 는 것 입 니 다.4 는 높이 입 니 다.이것 은 카메라 매 뉴 얼 의 매개 변수 와 일치 해 야 합 니 다.일반적인 웹 캠 은 두 가지 이미지 획득 형식 이 있 습 니 다.하 나 는 YUV 2 형식 입 니 다.10bit 에서 전 달 된 데 이 터 는 이론 적 으로 질 이 좋 지만 해상도 가 높 을 때 프레임 율 이 매우 낮 아진 다 는 것 이 큰 문제 입 니 다.또 다른 포맷 은 압축 기술 을 사용 해 얻 은 비디오 스 트림 인 MJPEG 포맷 이다.이 형식 을 통 해 매 뉴 얼 에 서 는 1920 x1080 해상도 에서 30fps 의 표현 을 얻 을 수 있다 고 했 는데 YUV 2 는 5fps 밖 에 없 었 다.cap.set(6 ,cv2.VideoWriter_fourcc(‘M', ‘J', ‘P', ‘G') );이 매개 변 수 는 MJPEG 형식 으로 카메라 의 데 이 터 를 읽 는 것 입 니 다.
다 중 스 레 드
방금 우리 도 말 했 듯 이 cap.read()라 는 함 수 는 그림 을 얻 었 습 니 다.그런데 요?우리 가 원 하 는 것 은 애니메이션 입 니 다.순환 을 쓰 면 다시 할 수 있 습 니 다.프로 세 스 가 순환 에 걸 려 서 가사 상태 로 찍 히 기 때문에 그림 을 그 리 는 데 는 반드시 다 중 스 레 드 기술 을 사용 해 야 합 니 다.여기 서 는 내 가 토 해 야 할 뿐만 아니 라여러 해 동안 컴퓨터 를 배 웠 고 직렬 알고리즘 과 프로 그래 밍 을 많이 했 습 니 다.다 중 스 레 드 에 대해 이야기 하면 Hello World 를 인쇄 하 는 것 이 아 닙 니 다!실천 도 없 이 이론 을 많이 배 웠 는데 쓸 때 머리 가 정말 큰 것 같 아 요!
사실 이곳 의 다 중 스 레 드 도 아무것도 없 잖 아 요.그냥 조정 하 는 거 예요.그러나 주의해 야 할 것 은 스 레 드 의 종 료 를 제어 하 는 것 입 니 다.python 이라는 제 가 도입 한 다 중 스 레 드 가방 에서 도둑 구 덩이 는 외부 에서 스 레 드 를 제어 하지 않 고 종 료 를 하 는 방법 입 니 다!그래서 저 는 전역 변 수 를 설정 하여 전역 변 수 를 판단 하 는 값 으로 하위 스 레 드 를 계속 할 지 여 부 를 판단 합 니 다.
엔 딩
실제로 해상도/프레임 설정 기능 도 있 습 니 다.쓰기 가 귀 찮 을 뿐 입 니 다!!3
GitHub: https://github.com/anonymouslycn/bjtu_BinocularCameraRecord
지나 가 는 것 도 새 롭 고 스타 에 게 잘 보 살 펴 주 셨 으 면 좋 겠 습 니 다.
이상 의 Python+OpenCV+pyQt 5 에서 쌍안경 카메라 영상 을 녹화 한 실례 는 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 될 수 있 고 많은 성원 을 바 랍 니 다.

좋은 웹페이지 즐겨찾기