下載MAMP_MAMP_PRO_4.2.0
Downloads (older versions) — MAMP & MAMP PRO
安裝步驟一直next就好
開啟MAMP

Apache Server跟MySQL server綠色實心表示有開啟
我們到MAMP->preference修改一下設定
Ports
使用QT內建方法擷取攝影機preview影像
使用QAbstractVideoSurface的繼承方法,dispatch給QCamera的類別,來獲取攝影機的圖像,這個方法可以獲取攝影機的每一幀,但CPU使用率可能很高。
在qmake(.pro檔案)加入需要的鏈結
QT += multimedia multimediawidgets
new一個QCamera物件
QCamera *m_camera = new QCamera();
因為這邊我們透過Qcamera來取得影像,可以把它想成是一個取圖的物件,透過他這個物件我們可以把攝影機呼叫出來
對這個QCamera進行設定
你可以透過QCameraViewfinderSettings來把像是resolution、格式、Frame rate等資訊設置到QCamera裡面
QCameraViewfinderSettings VfSettings;//VfSettings.setResolution(preferred_resolution);VfSettings.setPixelFormat(QVideoFrame::Format_YUYV);//QVideoFrame::Format_YUYV);//VfSettings.setMaximumFrameRate(15);m_camera->setViewfinderSettings(VfSettings);//設定當前相機的取景器
加入繼承自QAbstractVideoSurface的子類別

透過QCamera的setViewfinder來設置他的輸出方式
QCamera裡面的setViewfinder overload三個函式,通常情況下要簡單的顯示Camera會使用QCameraViewfinder(繼承至QVideoWidget)來設置,比方說下面這段code
camera = new QCamera(this);viewfind = new QCameraViewfinder();viewfind->show();camera->setViewfinder(viewfind);camera->start();
這邊我們就能直接用viewfind show出圖像來
但我們這邊會用QAbstractVideoSurface來設置,如下面這段code
m_cameraCapture = new QtCameraCapture;
m_camera->setViewfinder(m_cameraCapture);
connect(m_cameraCapture, SIGNAL(frameAvailable(QVideoFrame&)), this, SLOT(grabImage(QVideoFrame&)));
m_camera->start();
而我們需要自己另外再render
QCamera與QAbstractVideoSurface的關係
上面透過了QCamera的setViewfinder把QAbstractVideoSurface的子類作為接口設定進去
若有影像輸入,QAbstractVideoSurface便會呼叫present這個function
bool QtCameraCapture::present(const QVideoFrame &frame)
{
if (frame.isValid()) {
QVideoFrame cloneFrame(frame);
emit frameAvailable(cloneFrame);
return true;
}
return false;
}
emit會觸發frameAvailable的signal,而執行grabImage這個callback function.
將獲取到的影像轉換格式
觸發callback function後獲取到的影像為QVideoFrame的型態,透過frame->bits(),我可以取得影像的指標,而因為我設定的影像格式是YUYV,所以我實作了一個function把YUYV轉成RGB888,再指回給QImage