2011-01-14 73 views
7

Tôi đang cố gắng để OpenCV xử lý một khung ở giữa ống gstreamer.Thêm một số xử lý OpenCV vào luồng video gstreamer

Tôi có một ống GStreamer tạo ra các dòng, gửi nó cho appsink cho OpenCV mã để nhận:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 

Và một ống nhận được nó từ appsrc (mà OpenCV gửi dữ liệu) và xuất nó trên màn hình :

appsrc name=src ! jpegdec ! xvimagesink 

Tôi mở mỗi khung có yêu cầu kéo bộ đệm trên bồn rửa và xử lý bằng OpenCV, sau đó sử dụng bộ đệm đẩy trên src. Tôi đang làm tất cả những điều đó trong Python.

Vì một số lý do, điều đó dường như không hoạt động (lỗi phân đoạn).

Nhưng tôi không thực sự cố khắc phục; dù sao nó cũng không hiệu quả lắm. Tôi chỉ tự hỏi liệu có cách nào tốt hơn để có OpenCV quá trình khung trước khi nó đạt đến một bồn rửa đầu ra?

+2

Vì bạn muốn nhiều hơn những gì gst-opencv có thể cung cấp, nếu bạn không nhớ viết logic của bạn trong C (hoặc C++), có lẽ bạn nên thử viết nó như là một plugin để gst? Bạn có thể lấy một trong các nguồn gst-opencv plugins như một điểm khởi đầu – sinelaw

+1

Một điều khác - ví dụ của bạn dường như chỉ lấy từ v4l2, và tôi nghĩ rằng API HighGui của opencv hỗ trợ đã (hoặc ít nhất là v4l không có '2'). đó sẽ là giải pháp dễ nhất nếu bạn không thực sự cần gstreamer. – sinelaw

+0

1. Đề nghị tốt, tôi có thể làm điều đó. 2. Bạn nói đúng, tôi có thể sử dụng HighGUI trong trường hợp này, nhưng v4l2src chỉ được sử dụng làm ví dụ. Trong ứng dụng thực tế, tôi dự định nhận luồng video từ một nguồn tcp, vì vậy tôi không thể thực sự thực hiện toàn bộ điều trong OpenCV. – SMiLE

Trả lời

2

Bạn đã thử gst-opencv? Nó cung cấp một số nguyên thủy opencv như gstreamer plugins.

EDIT: Có vẻ như nó được hợp nhất thành gst-plugins-bad và liên kết ở trên đã lỗi thời.

+0

Cảm ơn câu trả lời của bạn. Tôi coi gst-opencv nhưng quyết định chống lại nó vì tôi muốn tự do xử lý các khung hình theo bất kỳ cách nào tôi muốn (ví dụ, áp dụng thuật toán học máy cụ thể cho miền) và các tùy chọn được cung cấp bởi gst-opencv rất chung chung. – SMiLE

1

Tôi biết một số năm đã trôi qua kể từ câu hỏi ban đầu của bạn, nhưng chỉ để ghi lại, OpenCv có thể mở đường ống Gstreamer trực tiếp. Xem câu trả lời (tự) trong Using custom camera in OpenCV (via GStreamer) để biết ví dụ.

Và, nhân tiện, OpenCv 3.0 (nhánh chính) thực sự tích hợp hỗ trợ gstreamer 1.0.

Các vấn đề liên quan