2015-04-12 97 views
0

我想打開外部攝像頭以使用opencv捕獲圖像。我寫了下面的代碼,我也檢查了一些與這個問題有關的問題,但是,當我運行代碼時,外部網絡攝像頭不會打開綠色指示燈 - 指示網絡攝像頭爲ON的LED和單詞「Opened 「被打印在屏幕上。正如您在代碼中看到的那樣,單詞「已打開」表示凸輪已打開。WebCam永遠不會ON

請讓我知道爲什麼我在網絡攝像頭的LED不亮時收到「打開」一詞。

代碼

public class MainClass { 

static { 
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
} 

private final static int WEBCAM_SELECT = -1; 
private final static int WEBCAM_BUILTIN = 0; 
private final static int WEBCAM_EXTERNAL = 2; 

static JFrame mediaFrame = new JFrame("Media"); 

public static void main(String[] args) throws InterruptedException { 

    Thread camThread = new Thread(new ThreadCam(), "CamThread"); 
    camThread.setDaemon(true); 

    VideoCapture vidCap = new VideoCapture(WEBCAM_EXTERNAL); 
    vidCap.open(WEBCAM_EXTERNAL); 

    Thread.sleep(10000);// wait 10 sec to initilize the device; 

    if (vidCap.isOpened()) { 
     System.out.println("opened");//after 10 seconds this word will be printed 
     camThread.start(); 
    } 
} 

更新

親切討好的Thread.sleep(10000);線和旁邊的評論。

static { 
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
} 

private final static int WEBCAM_SELECT = -1; 
private final static int WEBCAM_BUILTIN = 0; 
private final static int WEBCAM_EXTERNAL = 1; 

static JFrame mediaFrame = new JFrame("Media"); 

public static void main(String[] args) throws InterruptedException { 

    Thread camThread = new Thread(new ThreadCam(), "CamThread"); 
    camThread.setDaemon(true); 

    VideoCapture vidCap = new VideoCapture(); 
    vidCap.open(WEBCAM_EXTERNAL); 

    Thread.sleep(10000);// wait 10 sec to initilize the device; upto this line the Cam is ON, but after the 10 secs, it is OFF again and the word "Opened" is printed 

    if (vidCap.isOpened()) { 
     System.out.println("opened");//after 10 seconds this word will be printed 
     camThread.start(); 
    } 
} 
+0

您可以嘗試抓取一個框架來查看結果。如果它表示它被打開,那應該是。 –

回答

2

我以前也遇到這個問題,我實現了,下面兩行:

VideoCapture vidCap = new VideoCapture(); 
vidCap.open(WEBCAM_EXTERNAL); 

的實例VideoCapture類的一個對象,並打開一個特定的設備。

由於.isOpened返回true,這意味着您選擇的設備已成功打開。在調用.isOpened()之後,在.isOpened()和OFF之前,將ypur設備的LED設置爲ON,這並不意味着您選擇打開的設備不是ON或未能打開,但實際上它是打開的但是您沒有執行從您選擇打開的設備派生的任何操作。

例如,在.isOpened嘗試調用vidCap.grap()或進行視頻流處理之後,應該再次打開eLED。

0

嘗試使用WEBCAM_EXTERNAL = 1;而不是WEBCAM_EXTERNAL = 2;

我想知道你的硬件是PC/MAC嗎?

+0

請看看上面的更新部分..問題仍然存在。我使用Win8,sonyVaio – user2121