現象:攝像頭指示燈亮但畫面全灰,或直接報錯 No captured frame。同代碼他人電腦正常,說明代碼邏輯無誤,問題在環境差異。
CAP_DSHOW (DirectShow) 或 CAP_MSMF (Media Foundation)。部分攝像頭僅支援特定後端。VideoCapture cap(0 + CAP_DSHOW); 或 CAP_MSMF、CAP_VFW 逐一嘗試。cap.set(CAP_PROP_FOURCC, VideoWriter::fourcc('M','J','P','G'));cap.set(CAP_PROP_FRAME_WIDTH, 640); cap.set(CAP_PROP_FRAME_HEIGHT, 480);VideoCapture cap;
for (int backend : {CAP_DSHOW, CAP_MSMF, CAP_VFW, CAP_ANY}) {
cap.open(0 + backend);
if (cap.isOpened()) {
Mat frame;
if (cap.read(frame) && !frame.empty()) {
cout << "Backend " << backend << " works!" << endl;
break;
}
}
cap.release();
}
逐項排查通常能解決灰屏/無幀問題。若仍失敗,嘗試更換 USB 埠、更換攝像頭硬體測試。