2013-04-05 34 views
5

Tôi là người mới trong thế giới của Stackoverflow và trong lập trình OpenCV. Tôi đã thực hiện một số dự án với OpenCV Bindings for Java (các quan chức opencv.org, không phải JavaCV), như nhận dạng đối tượng thông qua các tính năng ORB và SURF, làm việc với hình ảnh. Mọi thứ ok. Bây giờ tôi đang chuyển sang nhận dạng đối tượng trong luồng video. Tôi muốn lấy luồng từ webcam và áp dụng nhận dạng đối tượng. Tôi không phải là một guru Java, vì vậy tôi tìm thấy trong OpenCV lớp VideoCapture, nhưng tôi không thể có được hình ảnh từ máy ảnh.OpenCV 2.4.4 Hình ảnh/luồng webcam Java - Grab (OSX)

Tôi đang chạy dự án của mình trong Eclipse với các liên kết OpenCV 2.4.4, trong OSX Mountain Lion.

Kết quả trong giao diện điều khiển:

Hello, OpenCV 
Camera OK? 
Frame Obtained 
Captured Frame Width 0 
Invalid memory access of location 0x7fae00000000 rip=0x7fff8b4c5263 

Mã:

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"); 
    } 
} 
+0

Hãy thử để mã hóa hình ảnh như .png. –

+0

Sự cố không ở định dạng hình ảnh. Giao diện điều khiển nói chiều rộng hình ảnh là 0. Thay đổi định dạng hình ảnh thành PNG thay đổi dòng cuối cùng trong bảng điều khiển thành: "libpng warning: Chiều rộng hình ảnh bằng 0 trong IHDR"; "cảnh báo libpng: Chiều cao hình ảnh bằng 0 trong IHDR"; "Lỗi libpng: Dữ liệu IHDR không hợp lệ". –

+1

SOLVED. Vấn đề đơn giản là máy ảnh cần thời gian để khởi tạo. Tôi đã thêm "Thread.sleep (1000);" sau "VideoCapture camera = new VideoCapture (0);". –

Trả lời

7

Vấn đề là chỉ đơn giản là máy ảnh mà cần thời gian để khởi tạo. Tôi đã thêm

Thread.sleep(1000); 

sau

VideoCapture camera = new VideoCapture(0); 
3

Tôi đã thử mã này trong hệ điều hành MacOS, và tìm thấy lỗi khác.

System.loadLibrary("opencv_java244"); 

Trên đường trở về lỗi này

java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.VideoCapture_2(I)J 

Để khắc phục nó, tôi thay thế dòng đó với điều này một

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

và mã hiệu quả!

Tôi đang sử dụng OpenCV 2.4.8, bao gồm nó như là thư viện sử dụng trong dự án thực của tôi

+0

Đối với những người khác ngoài kia: Tôi cũng có một số vấn đề với UnsatisfiedLinkError. Tôi đã bỏ lỡ bước để đặt 'Vị trí thư viện gốc' của thư viện người dùng thành '/lib'. Hy vọng điều này sẽ giúp một ai đó. – Christof

3

Thay
System.loadLibrary("opencv_java244");
với
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);