Tôi gặp phải sự cố lạ khi sử dụng trình giả lập Android & OpenCV CameraBridgeViewBase
.OpenCV Android - vấn đề màu sắc bằng cách sử dụng CameraBridgeViewBase
Sử dụng onCameraFrame
Tôi nhận được ảnh có vẻ như không được giải mã đúng cách.
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
return inputFrame.rgba();
}
Sử dụng 'inputFrame.gray()' Tôi nhận được những gì mong đợi - hình ảnh đen trắng mà không có hiện vật hoặc bất kỳ vấn đề nào khác.
Đó là những gì tôi nhận được:
One more picture (a bigger one)
Những gì tôi đã cố gắng cho đến nay:
- các cấp API khác nhau (từ 15 đến 21).
- Trình mô phỏng khác nhau: Bộ mô phỏng & Google Android.
- Kiến trúc nền tảng khác nhau - cả ARM và Intel x86.
- Khởi chạy bộ mô phỏng trên máy tính xách tay khác nhau với Linux: hoạt động như mong đợi, sự cố đã biến mất!
- Khởi chạy ứng dụng, sử dụng OpenCV, được tải xuống từ Cửa hàng Play. Họ DO làm việc! Tuy nhiên:
- Khởi chạy ứng dụng hoạt động như mong đợi, sau đó đóng ứng dụng.
- Khởi chạy ứng dụng của bạn (hoặc một trong các hướng dẫn OpenCV), sau đó đóng ứng dụng.
- Khởi chạy lại ứng dụng từ bản 5.1, tôi thấy rằng nó bị ảnh hưởng bởi cùng một lỗi!
- Phiên bản OpenCV khác nhau (2.4.9 và 2.4.10).
- Các phiên bản khác nhau của trình quản lý OpenCV (một từ Cửa hàng Play và 2.4.9 & 2.4.10 từ gói OpenCV).
- Cuối cùng, như tôi đã nhận thấy trong 5.2, các tệp .apk được biên dịch trước từ gói OpenCV cũng bị ảnh hưởng bởi sự cố.
Mọi thứ hoạt động như mong đợi trên các thiết bị Android thực của tôi.
Sau khi xem các nguồn của các lớp máy ảnh CameraBridgeViewBase
và Java/Native, tôi đã đưa ra quyết định rằng sự cố xảy ra trong khi giải mã hình ảnh. Có thể có vấn đề với định dạng đầu ra máy ảnh nền tảng cụ thể (YUV, NV21). Tuy nhiên, thật lạ lùng khi .gray() đưa ra một hình ảnh thích hợp (không có hiện vật).
Tôi đang sử dụng Mac OS X 10.10 Yosemite và MacBook Air với máy ảnh "FaceTime HD" nếu điều đó quan trọng.
Bất kỳ ý tưởng nào về cách khắc phục sự cố này & trợ giúp trong việc tìm ra thư mục gốc của vấn đề được đánh giá cao!
Sử dụng Android Studio 1.5.1 và mô phỏng API 23, ở trên chỉ hoạt động khi '" generic "' được đổi thành '" android "'.Hoạt động hoàn hảo sau sự thay đổi đó. –
Tôi chỉ cố gắng này và nó hoạt động tốt. Mặc dù, tôi không chắc chắn đây có phải là cách tiếp cận ưa thích hay không, nó phải được cố định theo một cách khác. Tôi đã tạo ra một vấn đề trong kho lưu trữ OpenCV, nơi nếu điều này được chấp nhận, nó có thể được gửi như một yêu cầu kéo. –
Để truy xuất nguồn gốc: https://github.com/opencv/opencv/issues/8166 –