2017-06-03 2 views
1

Dans un environnement OpenCv4Android, lorsque je crée une image Mat et que j'utilise Core.line() pour dessiner sur l'image, elle affiche toujours un blanc au lieu de la couleur que je spécifie.OpenCv Core.line dessine blanc lorsque la couleur est attendue

white square instead of green square

J'ai vu a question related to gray scale, mais l'image que j'ai n'a pas été converti en gris.

public class DrawingTest extends AppCompatActivity { 
    public static final Scalar GREEN = new Scalar(0,255,0); 
    private RelativeLayout mLayout; 
    private ImageView imageView; 

    static { 
     System.loadLibrary("opencv_java"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_drawing_test); 

     mLayout = (RelativeLayout) findViewById(R.id.activity_drawing_test); 
     mLayout.setDrawingCacheEnabled(true); 

     imageView = (ImageView) this.findViewById(imageView_dt); 

     //test.jpg is in the drawable-nodpi folder, is an normal color jpg image. 
     int drawableResourceId = getResources().getIdentifier("test", "drawable", getPackageName()); 
     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawableResourceId); 
     //Mat matImage = new Mat(); // Also white 
     Mat matImage = new Mat(bitmap.getHeight(), bitmap.getWidth(), CV_8UC4); 
     Utils.bitmapToMat(bitmap, matImage); 


     // Attempt to draw a GREEN box, but it comes out white 
     Core.line(matImage, new Point(new double[]{100,100}), new Point(new double[]{100, 200}), GREEN,4); 
     Core.line(matImage, new Point(new double[]{100,200}), new Point(new double[]{200, 200}), GREEN,4); 
     Core.line(matImage, new Point(new double[]{200,200}), new Point(new double[]{200, 100}), GREEN,4); 
     Core.line(matImage, new Point(new double[]{200,100}), new Point(new double[]{100, 100}), GREEN,4); 

     Bitmap bitmapToDisplay = Bitmap.createBitmap(matImage.cols(), matImage.rows(), Bitmap.Config.ARGB_8888); 
     Utils.matToBitmap(matImage, bitmapToDisplay); 
     imageView.setImageBitmap(bitmapToDisplay); 
    } 
} 

Répondre

2

Le problème est avec la couleur que vous avez initialisé

public static final Scalar GREEN = new Scalar(0,255,0); 

selon cette déclaration

Mat matImage = new Mat(bitmap.getHeight(), bitmap.getWidth(), CV_8UC4);` 

vous créez un tapis de 4 canaux, mais l'initialisation du GREEN Scalar avec 3 composants seulement, d'où le 4ème composant, qui définit la couleur du quatrième canal de votre ligne, qui est définie par défaut de la valeur 0 dans votre cas. Donc, ce que vous percevez comme une couleur blanche est transparent dans la réalité. Vous pouvez corriger cela soit en créant matImage avec CV_8UC3 ou en changeant votre scalaire GREEN pour être public static final Scalar GREEN = new Scalar(0,255,0, 255);