我一直致力于使用OpenCV构建Java应用程序,该应用程序从网络摄像头抓取数据并进行记录。但是,我无法实现大于10 FPS(Intel i5-5200u,8 GB RAM)的帧速率,这对我来说似乎不对。我的网络摄像头支持高达30 FPS和1280 x 720分辨率。以640 x 480记录仅增加到大约12 FPS。以720p录制(我需要为我的应用程序做)录制前面提到的10.我的第一个想法是VideoCapture.read()函数需要相对较长的时间来处理,所以我尝试将这些调用移动到线程池,但是它没有任何收获。我已经阅读了这个库应该有多快的所有内容,所以我一定做错了。以下是捕获数据的循环:
VideoCapture cam = new VideoCapture();
cam.open(0);
// set proper resolution
cam.set(Videoio.CV_CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH);
cam.set(Videoio.CV_CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT);
// Matrix for storing camera images, provided by OpenCV
ArrayList<Mat> framesList = new ArrayList<>();
long startTime = System.currentTimeMillis();
if( ! cam.isOpened()) {
System.err.println("Camera could not be opened.");
}
else {
System.out.println("Capturing...");
while(System.currentTimeMillis() - startTime < 1000 * SECONDS_TO_RUN) {
Mat frame = new Mat();
cam.read(frame);
framesList.add(frame);
}
cam.release();
System.out.println("Done recording. " + framesList.size() + " frames captured.");
System.out.println("Framerate : " + framesList.size() / SECONDS_TO_RUN);