2016-08-04 1 views
0

J'utilise la couleur intrinsèque de Renderscript pour appliquer un filtre sépia, mais il rend l'image entière verte, plutôt que de lui donner cette teinte jaunâtre (sépia). La réponse de ce thread est ma base actuelle pour les tests (http://answers.opencv.org/question/99510/opencv4android-31-mat-to-allocation-renderscript/). Un bitmap est transformé en un OpenCV Mat puis dans une allocation et passé sur renderScript où la valeur intrinsèque qui suit fait son travail:Application de Sépia via Renderscript ScriptIntrinsicColorMatrix transforme l'image en nuances de vert

Element element = Element.RGBA_8888(mRS); 
ScriptIntrinsicColorMatrix colorMatrix = ScriptIntrinsicColorMatrix.create(mRS, element); 
final Matrix4f mSepia = new Matrix4f(new float[]{ 
       0.189f, 0.769f, 0.393f, 0f, 
       0.168f, 0.686f, 0.349f, 0f, 
       0.131f, 0.534f, 0.272f, 0f, 
       0.000f, 0.000f, 0.000f, 1f}); 
colorMatrix.setColorMatrix(mSepia); 
colorMatrix.forEach(inputAllocation, outputAllocation); 

j'exclure une erreur dans ce complexe Bitmap à Mat processus d'allocation, parce que quand j'ai essayé de exécuter l'intrinsèque sur un bitmap directement il ya quelques semaines, j'ai eu exactement le même problème de teinte verte. Je suppose que ce devrait être un vecteur (R, G, B, A) qui est ensuite multiplié par la matrice que j'ai donnée, mais quelque chose de louche doit se produire en cours de route.

Est-ce que quelqu'un sait ce qui se passe ici?

+0

est la source d'une Bitmap à partir d'un fichier ou d'un appareil photo? Si la caméra ne doit pas les données sont au format YUV? –

+0

Il provient d'un bitmap d'un fichier. Quand je l'ai fait il y a quelques semaines, j'ai transformé OpenCV Mat rgba en Bitmap argb_8888 et j'ai fini par avoir le même problème. – AllBecomesGood

+0

Mise à jour: Je reçois la même teinte verte bizarre lors de la diffusion directe à partir de Camerafeed et en laissant Renderscript effectuer les conversions (YUV à RVB, puis appliquer colormatrix et convertir en bitmap pour afficher à l'écran). Je me méfie des bitmaps impliqués, peut-être la façon dont il enregistre les pixels est différente et provoque l'étrangeté. – AllBecomesGood

Répondre

0

stocke OpenCV images en utilisant le format B-G-R, pas le R-G-B un, donc probablement vous avez juste besoin d'échanger les canaux B et R :)

+0

Si seulement c'était si facile! Merci pour la suggestion cependant! :) – AllBecomesGood

+0

J'ai essayé, c'est un problème commun sous-estimé – cmaster11