2012-11-02 27 views
12

Ứng dụng của tôi sử dụng cv :: findContours của opencv trên hình ảnh nhị phân. Bây giờ tôi cần phải làm cho nó thời gian thực. GPUImage có một bộ lọc cannyedge nhưng tôi không thể tìm thấy bất cứ điều gì liên quan đến findContours. GPUImage có bất kỳ thứ gì gần giống với findContours không? Nếu không, ai đó có thể đề nghị một sự thay thế? Cảm ơnTương đương GPUImage của cv :: findContours

+5

Không có bất kỳ nội dung nào trong đó thực hiện việc này ngay bây giờ. Đó là một vấn đề khó khăn để làm việc trên GPU. Gần đây tôi đã đọc qua bài báo của Sean O'Connell về kỹ thuật này: ftp://ftp.heanet.ie/mirrors/sourceforge/g/gc/gccl/paper_draft.pdf nhưng ngay cả ở đó anh cũng không thấy một sự tăng tốc lớn trong việc xác định các đối tượng được kết nối trên GPU. Như một thước đo nửa chừng, bạn có thể chạy phát hiện cạnh đầu tiên trên GPU, sau đó đọc kết quả từ đó để xử lý CPU. Ít nhất bạn sẽ nhận được một chút tăng tốc từ đó. –

+0

Tôi nghĩ tôi sẽ đi tuyến đường đó. Cách tốt nhất/hiệu quả để chuyển đổi các bộ đệm thô sau khi chạy một bộ lọc vào cv :: Mat là gì? Tôi đã thử chuyển đổi nó thành -> UIImage -> cv :: Mat nhưng quá lâu. – 0xSina

+2

Hãy thử một GPUImageRawDataInput, nơi bạn sẽ có thể ăn trong dữ liệu RGBA (hoặc BGRA, tôi quên thứ tự byte) mà không cần phải đi qua Core Graphics cho UIImage. –

Trả lời

0

Có một vấn đề báo cáo về vấn đề này trong 2015. https://github.com/BradLarson/GPUImage/issues/2094

Câu trả lời về vấn đề này khẳng định rằng GPUImage không cung cấp bất kỳ thay thế như vậy vào lúc này. Vì vậy, dự đoán tốt nhất có thể là cung cấp đầu ra từ phát hiện cạnh Canny hoặc Sobel của GPUImage vào một hoạt động xác định đường viền bên ngoài khung GPUImage.