一、問題
使用下列方法調用OpenCV編程調用樹莓派攝像頭時總是失敗,提示調用Grabber的start()時失敗。
import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacv.*; public class Main { public static void main(String[] args) throws InterruptedException, FrameGrabber.Exception { FrameGrabber grabber = new FFmpegFrameGrabber("/dev/video0"); //OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0); grabber.setImageWidth(640); grabber.setImageHeight(480); grabber.start(); //開始獲取攝像頭數據 OpenCVFrameConverter.ToMat convertToMat = new OpenCVFrameConverter.ToMat(); while (true) { Frame frame = grabber.grab(); opencv_core.Mat mat = convertToMat.convert(frame); if (mat.empty()) { System.out.println("mat is empty."); break; } else { System.out.println("Heith:" + frame.imageHeight + " x Width:" + frame.imageWidth); Thread.sleep(30); } } grabber.stop(); grabber.close(); grabber.release(); } }
二、原因
原因在於OpenCV在調用Linux中的攝像頭時,沒找到/dev/video0這個設備,因此需要添加一個簡單的配置來搞定。
三、解決方案
找到下列文件:/etc/modules-load.d/modules.conf
vim /etc/modules-load.d/modules.conf
在末尾添加一行記錄:
bcm2835-v4l2
如圖:
重啟設備!!