알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

[Qt Multimedia]Camera 구현 세부 정보 본문

QT/Qt Multimedia 공부하기

[Qt Multimedia]Camera 구현 세부 정보

백곳 2017. 9. 15. 19:37

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). 을 호출 하면 됩니다 .





Comments