알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
[Qt Multimedia]Camera 구현 세부 정보 본문
Camera 구현 세부 정보
Detecting and Selecting Camera
사용할수 있는 카메라의 정보에 접근 할수 있습니다.
bool checkCameraAvailability() { if (QCameraInfo::availableCameras().count() > 0) return true; else return false; }
여러대의 카메라를 사용할 수 있는 경우 사용할 것을 지정할 수 있습니다.
QList<QCameraInfo> cameras = QCameraInfo::availableCameras(); foreach (const QCameraInfo &cameraInfo, cameras) { if (cameraInfo.deviceName() == "mycamera") camera = new QCamera(cameraInfo); }
또한 장치 ID대신 시스템의 물리적 위치로 카메라를 선택할 수도 있습니다. 이것은 휴대용 기기에 유용한데, 이것은 종종 전면적인 얼굴을 가지고 있는 카메라를 가지고 있기 때문이다.
camera = new QCamera(QCamera::FrontFace);
장치 ID또는 위치가 지정되지 않은 경우 기본 카메라가 사용됩니다.
데스크 톱 플랫폼에서 기본 카메라는 시스템 설정에서 사용자가 설정합니다. 모바일 기기에서 백 슬래시 카메라는 일반적으로 기본 카메라입니다. QCamercInfo를 사용하여 기본 카메라에 대한 정보를 얻을 수 있습니다.
Viewfinder
꼭 필요한 것은 아니지만, 카메라가 가리키는 것을 볼 수 있는 것이 종종 유용합니다. 대부분의 디지털 카메라를 사용하면 카메라 센서에서
해상도가 낮은 해상도로 영상을 전송할 수 있습니다. 그리고 그림이나 비디오를 인코딩 할수 있습니다. 고해상도의 경우는 너무 변환 하는데
오랜 시간이 걸리지만 저해상도는 빠르게 전송하고 인코딩이 가능합니다.
viewfinder 예제
camera = new QCamera; viewfinder = new QCameraViewfinder; camera->setViewfinder(viewfinder); viewfinder->show(); camera->start(); // to start the viewfinder
QAbstractVideoSurface 를 사용하면 viewfinder 를 만들어 필요한 렌더링 이미지를 직접 구현 할수 있습니다.
camera = new QCamera; mySurface = new MyVideoSurface; camera->setViewfinder(mySurface); camera->start(); // MyVideoSurface::present(..) will be called with viewfinder frames
모바일 장치에서 뷰 파인더 이미지가 항상 예상하는 방향에 있지 않을 수 있습니다.(예를 들면 가로모드 세로모드) 화면
그 결과로 이는 디바이스 방향에 따라 좌우 대칭 또는 반전된 영상이 나타납니다.
사용자가 실제로 보는 화면에 비추어 볼 때, 카메라 센서 방향과 현재 디스플레이 방향을 고려하여 항상 뷰 파인더 프레임이 올바른 방향으로
회전하는지 확인해야 합니다.
// Assuming a QImage has been created from the QVideoFrame that needs to be presented QImage videoFrame; QCameraInfo cameraInfo(camera); // needed to get the camera sensor position and orientation // Get the current display orientation const QScreen *screen = QGuiApplication::primaryScreen(); const int screenAngle = screen->angleBetween(screen->nativeOrientation(), screen->orientation()); int rotation; if (cameraInfo.position() == QCamera::BackFace) { rotation = (cameraInfo.orientation() - screenAngle) % 360; } else { // Front position, compensate the mirror rotation = (360 - cameraInfo.orientation() + screenAngle) % 360; } // Rotate the frame so it always shows in the correct orientation videoFrame = videoFrame.transformed(QTransform().rotate(rotation));
Still Images
뷰파인더를 통해서 이미지 캡쳐를 할수 있습니다.
그러면 필요한 모든 것이 카메라를 시작하고, 이미지를 고정하고, 이미지를 캡처하고 다음 사진을 촬영할 때 카메라를
잠금 해제하는 것이 필요합니다.
imageCapture = new QCameraImageCapture(camera); camera->setCaptureMode(QCamera::CaptureStillImage); camera->start(); // Viewfinder frames start flowing //on half pressed shutter button camera->searchAndLock(); //on shutter button pressed imageCapture->capture(); //on shutter button released camera->unlock();
Movies
녹화 비디오를 사용하려면 QMediaRecorder개체를 사용해야 합니다.
camera = new QCamera; recorder = new QMediaRecorder(camera); camera->setCaptureMode(QCamera::CaptureVideo); camera->start(); //on shutter button pressed recorder->record(); // sometime later, or on another press recorder->stop();
MediaRecorder의 신호는 슬롯에 연결하여 레코더 또는 오류 이벤트의 상태 변화에 대응할 수 있습니다.
기록 자체가 기록되는 매체의 record()기능으로 시작되며, 이는 stateChanged() 신호를 보냅니다. 녹화 프로세스는 QMediaRecorder의 recode(), stop()및 setMuted()슬롯을 통해 변경할 수 있습니다.
Focus and Zoom
Foucs와 Zoom 은 QCameraFocus calss 에 관리되고 사용됩니다.
QCameraFocus를 사용하면 개발자가 PocusMode및 FocusPointMode를 사용하여 일반 정책을 설정할 수 있습니다.
FocusMode는 AutoFocus, ContinuousFocus및 InfinityFocus와 같은 설정을 다룹니다. 반면 FocusPointMode는 자동 초점 모드에 사용되는
다양한 초점 영역을 다룹니다.
FocusPointMode는 얼굴 인식(카메라가 지원하는 경우), 초점을 맞출 수 있는 맞춤형 초점 및 맞춤형 초점 맞춤을 지원합니다.
지원하는 카메라 하드웨어의 경우, 매크로 포커스는 센서 가까이에 있는 물체의 영상을 촬영할 수 있습니다. 이는 바코드 인식 또는 명함
스캔과 같은 응용 프로그램에서 유용합니다.
집중적으로, QCamerpPocus를 사용하면 사용 가능한 광학 또는 디지털 줌을 제어할 수 있습니다. 일반적으로 광학 줌은 고품질이지만 제조 비용이 더 비싸므로 사용 가능한 확대 범위가 제한될 수 있습니다(또는 통합에 집착할 수 있음).
Exposure, Aperture, Shutter Speed and Flash
카메라 센서에 도달하는 빛의 양에 영향을 미치는 수많은 설정이 있으며, 따라서 결과적으로 이미지의 품질이 저하됩니다
QCamerVaxposure클래스를 사용하면 이러한 설정을 조정할 수 있습니다. 이 클래스를 사용하여 노출 파라미터(예:QCamera://searchAnocock())와 같은 일부 기법을 사용하여 높은 동적 범위를 설정하고, 느린 셔터 속도를 구현할 수 있습니다.
자동 영상 촬영에 대한 기본 설정은 노출 모드 및 플래시 모드입니다.
일반적으로 다른 설정(aperture, ISO setting, shutter speed)은 대개 자동으로 관리되지만, 원하는 경우에는 오버 라이드 할 수도 있습니다.
또한 측정을 측정할 카메라 프레임의 일부를 제어하기 위해 QCamerVaxposure()를 조정할 수도 있습니다.
또한 일부 카메라 구현에서는 노출 측정에 사용해야 하는 특정 시점을 지정할 수 있습니다. 이 경우 사용자가 시청자의 흥미로운 부분을 터치하거나 클릭할 수 있습니다.
플래시 하드웨어( 있는 경우)를 제어할 수 있습니다.
일부 경우에는 하드웨어가 Torch 로 인해 두배가 될 수도 있습니다(일반적으로 플래시가 제논 또는 다른 전구가 아닌 경우). 또한 Torch 기능
을 사용하기 위해 쉽게 사용할 수 있는 API를 참조하십시오.
Image Processing
영상 시리즈를 연속적으로 촬영하려면 영상 처리 설정을 잠가야 합니다(예:QCamera:::lock://lock(aaamera::LOCK)과 유사한 모든 영상이 나타나도록 영상 처리 설정).
Canceling Asynchronous Operations
이미지 캡처 및 자동 초점 조정과 같은 다양한 작업이 발생합니다.
이러한 작업은 카메라에서 지원되는 한 새 작업을 시작하여 종종 취소할 수 있습니다.
영상 캡처를 취소하면 취소할 수 있습니다 cancelCapture() 을 사용하면 됩니다.
AutoFocus, autoexposure 을 사용하기 위해서는 QCamera::unlock(QCamera::LockFocus). 을 호출 하면 됩니다 .
'QT > Qt Multimedia 공부하기' 카테고리의 다른 글
비디오 위젯 예제 분석 데이터의 흐름을 파악(1) (0) | 2017.09.16 |
---|---|
[Qt Multimedia]Multimedia Recipes (0) | 2017.09.15 |
[Qt Multimedia]Video 구현 세부 정보 (0) | 2017.09.14 |
[Qt Multimedia]Audio 구현 세부 정보 (0) | 2017.09.13 |
[Qt Multimedia] Multimedia Components (0) | 2017.09.12 |