[英]black screen video capture opencv
我正在嘗試測試一個非常簡單的程序來使用相機捕獲視頻,但似乎窗口總是黑色的。 攝像頭的燈亮了,程序編譯就好了。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main() {
VideoCapture stream1(0); //0 is the id of video device.0 if you have only one camera.
if (!stream1.isOpened()) { //check if video device has been initialised
cout << "cannot open camera";
}
//unconditional loop
while (true) {
Mat cameraFrame;
stream1.read(cameraFrame);
imshow("cam", cameraFrame);
if (waitKey(30) >= 0)
break;
}
system("pause");
return 0;
}
我遇到了同樣的問題,我發現卡巴斯基阻止了對我的相機的訪問。 如果您打開 Kapresky 並轉到“報告”,然后轉到“高級線程保護”選項卡下的“主機入侵防護”列,您可以查看它是否阻止了您的攝像頭。
如果這是問題所在,您可以轉到Settings
-> General Settings
-> Exclusions
-> Scan exclusions and trusted applications
,然后單擊Settings
。 然后轉到Trusted Applications tab
並單擊Add
-> Applications
。 搜索Python
並單擊確定並選中所有框。 單擊確定,然后保存,它應該可以工作。
要縮小問題的根源,您可以按照以下步驟進行操作:
檢查 OpenCV highgui 是否配置正確。 使用捕獲保存的視頻
VideoCapture stream1("video.avi"); stream1.read(cameraFrame);
在 cameraFrame 上執行 imshow。
-如果還是黑屏,更換stream1.read(cameraFrame);
與stream1>>cameraFrame;
如果您現在可以看到您的視頻,則意味着 OpenCV highgui 配置正確,並且您使用的相機可能存在問題。
通常,主相機驅動程序不會授予對第三方庫(在本例中為 OpenCV)的訪問權限。 將VideoCapture stream1(0)
替換為VideoCapture stream1(1)
。 現在這將指向您機器的基本凸輪驅動程序,而不是主凸輪驅動程序。
如果黑屏仍然存在,如果可能的話,我建議使用外部網絡攝像頭進行測試,問題可能出在相機硬件本身
遇到類似的問題(但使用Python)。 Saransh Kejriwa 的評論對 DSHOW 有效。 萬一有人偶然發現:
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
cap = cv2.VideoCapture()
cap.open(1 + cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FOURCC, fourcc)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 60)
我遇到了同樣的問題,在嘗試了所有解決方案后,我發現我的網絡攝像頭分辨率更高。
通過將 1280 * 720 更改為 640 * 480 來修復它。
我有同樣的問題,並通過替換解決了
if (waitKey(30) >= 0)
break;
與
if( (char)waitKey(10) == 'q' )
break;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.