2014-05-09 24 views
8

Tôi đang sử dụng bảng Nitrogen6x với máy ảnh ov5640 (mipi).Sử dụng máy ảnh tùy chỉnh trong OpenCV (qua GStreamer)

Chiếc máy ảnh này không được sử dụng tiêu chuẩn V4L/V4L, nhưng chúng ta có thể truyền video sử dụng GStreamer cho driver của nó (mfw_v4l):

gst-launch mfw_v4lsrc ! autovideosink 

Tôi muốn sử dụng camera trong OpenCV bằng cách gọi nó qua GStreamer (GStreamer bên trong OpenCV). Tôi hỏi một câu hỏi về gọi GStreamer bên trong OpenCV here, và đây là theo dõi.

Nếu tôi bật hỗ trợ GStreamer, nó được chọn in the source code, nhưng OpenCV cố gắng sử dụng tiêu chuẩn V4L/V4L2 cho GStreamer mà tôi muốn thay đổi. Phần về gọi GStreamer là trong cap_gstreamer.cpp:

CvCapture* cvCreateCapture_GStreamer(int type, const char* filename) 
{ 
    CvCapture_GStreamer* capture = new CvCapture_GStreamer; 

    if(capture->open(type, filename)) 
     return capture; 

    delete capture; 
    return 0; 
} 

Tôi đoán đây là phần tôi nên làm việc trên bằng cách nào đó trỏ đến tài xế của máy ảnh. ("loại" ở đây có thể là một số liên quan đến trình điều khiển (như được định nghĩa trong precomp.hpp), nhưng "tên tệp" là gì?)

Bất kỳ đề xuất nào về cách truy cập máy ảnh qua GStreamer sẽ hữu ích và được đánh giá cao. Cảm ơn!

Trả lời

5

Hình như chúng ta có thể gọi là máy ảnh sử dụng một đường ống GStreamer thích hợp như dưới đây:

VideoCapture cap("mfw_v4lsrc ! ffmpegcolorspace ! video/x-raw-rgb ! appsink") 

như sản lượng camera ở YUV, chúng ta cần phải chuyển đổi đó để RGB để vượt qua các khung để OpenCV. This là nơi OpenCV đảm bảo rằng nó nhận được không gian màu RGB.

+0

Trong đó phiên bản của OpenCV làm việc này? –

+0

không hoạt động trước opencv v3 –

0

Chỉ cần để tham khảo, công trình này trong OpenCV 3.0:

VideoCapture cap("souphttpsrc location=http://root:[email protected]:80/mjpg/video.mjpg ! decodebin ! videoconvert ! appsink") 
Các vấn đề liên quan