Я новичок в мире Stackoverflow и программирования OpenCV. Я сделал несколько проектов с OpenCV Bindings для Java (должностные лица opencv.org, а не JavaCV), как распознавание объектов через функции ORB и SURF, работа с изображениями. Все в порядке. Теперь я перехожу к распознаванию объектов в видеопотоках. Я хочу захватить поток с веб-камеры и применить распознавание объектов. Я не Java-гуру, поэтому я нашел в OpenCV класс VideoCapture, но я не могу получить фотографии с камеры.OpenCV 2.4.4 Java - захват изображения/потока веб-камеры (OSX)
Я запускаю свой проект в Eclipse с помощью OpenCV 2.4.4 привязок, в OSX Mountain Lion.
В результате в консоли:
Hello, OpenCV
Camera OK?
Frame Obtained
Captured Frame Width 0
Invalid memory access of location 0x7fae00000000 rip=0x7fff8b4c5263
Код:
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.highgui.VideoCapture;
public class Webcam {
public static void main (String args[]){
System.out.println("Hello, OpenCV");
// Load the native library.
System.loadLibrary("opencv_java244");
VideoCapture camera = new VideoCapture(0);
camera.open(0); //Useless
if(!camera.isOpened()){
System.out.println("Camera Error");
}
else{
System.out.println("Camera OK?");
}
Mat frame = new Mat();
//camera.grab();
//System.out.println("Frame Grabbed");
//camera.retrieve(frame);
//System.out.println("Frame Decoded");
camera.read(frame);
System.out.println("Frame Obtained");
/* No difference
camera.release();
*/
System.out.println("Captured Frame Width " + frame.width());
Highgui.imwrite("camera.jpg", frame);
System.out.println("OK");
}
}
Кодируется изображение .png. –
Проблема не в формате изображения. Консоль говорит, что ширина изображения равна 0. Изменение формата изображения в PNG изменяет последнюю строку в консоли на: «предупреждение libpng: ширина изображения равна нулю в IHDR»; «Предупреждение libpng: высота изображения равна нулю в IHDR»; «Ошибка libpng: неверные данные IHDR». –
РЕШЕН. Проблема заключалась в том, что для инициализации камера требует времени. Я добавил «Thread.sleep (1000)»; после "VideoCapture camera = new VideoCapture (0);". –