OpenCv Core.line рисует белый цвет, когда ожидается цвет

В среде OpenCv4Android, когда я создаю изображение Mat и использую Core.line() для рисования на изображении, оно всегда показывает белый цвет вместо указанного цвета.

белый квадрат вместо зеленого квадрата

Я видел вопрос, связанный с шкалой серого, но изображение, которое у меня есть, не было преобразовано в серый цвет.

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);
    }
}

person Dale    schedule 03.06.2017    source источник


Ответы (1)


Проблема с цветом, который вы инициализировали

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

согласно этому заявлению

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

вы создаете 4-канальный мат, но инициализируете GREEN Scalar только с 3 компонентами, следовательно, 4-й компонент, который определяет цвет четвертого канала вашей линии, для которого установлено значение по умолчанию 0 в вашем случае.

Итак, то, что вы воспринимаете как белый цвет, на самом деле прозрачно. Вы можете исправить это, либо создав matImage с CV_8UC3, либо изменив свой скаляр GREEN на public static final Scalar GREEN = new Scalar(0,255,0, 255);.

person ZdaR    schedule 04.06.2017