Я хотел бы преобразовать изображение RGB в серый цвет, как это делает эта функция:
Imgproc.cvtColor(mRgba, mGrey, Imgproc.COLOR_RGBA2GRAY);
Но openCV использует конкретную формулу (0,299 * R + 0,587 * G + 0,114 * B, я думаю?), и вместо этого я хотел бы использовать min (R, G, B).
Есть ли эффективный способ сделать это? (Это OpenCV для Android, поэтому с Java)
ИЗМЕНИТЬ:
Вот профилирование, которое я определенно должен был сделать раньше:
Базовое приложение для захвата камеры работает со скоростью 12 кадров в секунду.
- с cvtColor() OpenCV: 12 FPS (разница в скорости незначительна)
- с ответом Марка Миллера: 1,5 FPS
- с ответом Марка Миллера и оптимизацией Мики (один раз получить указатель данных): 7 FPS
Это может показаться невероятным, но только эта маленькая функция стоит половину FPS. Устройство все еще может выполнять очень сложные вещи, такие как ORB, с приличной скоростью (3-4 FPS) и все подпрограммы O (n) C ++ без разницы в FPS. Также только «уловка» Мики делает функцию в 10 раз быстрее.
split
и два вызоваmin
не помогут? Я поверю вам на слово, так как я не использовал OpenCV в Java, только в C++. - person beaker   schedule 13.07.2015