Рисование прямоугольника Live JavaCameraView OpenCV Android Studio - PullRequest
0 голосов
/ 07 апреля 2020

Я студент бакалавриата и работаю над своей последней работой - приложением распознавания / идентификации цвета. Я работаю со студией android и использую библиотеку OpenCV. И я столкнулся с проблемой - каким-то образом квадрат не появляется. Идентификатор работает (он показывает цвет, который находится в середине экрана), но мне нужен квадрат, чтобы увидеть, какой именно цвет он принимает. Ошибок не обнаружено.

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        mat1 = inputFrame.rgba();
        Core.transpose(mat1, mat2);
        Imgproc.resize(mat2, mat3, mat1.size(), 0, 0, 0);
        Core.flip(mat3, mat1, 1);

        int w = mat1.width();
        int h = mat1.height();
        int w_rect = w*3/4;
        int h_rect = h*3/4; 

        Imgproc.rectangle(mat1, new Point( (w-w_rect)/2, (h-h_rect)/2 ), new Point(
                (w+w_rect)/2, (h+h_rect)/2 ), new Scalar( 255, 0, 0 ), 5);

        return mat1;
    }

Идентификационный код

public boolean onTouchEvent(MotionEvent event) {
        x = (int) event.getX();
        y = (int) event.getY();


        Bitmap bitmap = Bitmap.createBitmap(mat1.cols(), mat1.rows(), Bitmap.Config.ARGB_8888);
        Utils.matToBitmap(mat1, bitmap);
        float angle = 90;
        Matrix matrix = new Matrix();
        matrix.postRotate(angle);
        Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, mat1.cols(), mat1.rows(), matrix, true);


        int pixel = bitmap1.getPixel(360, 640);

        int r = Color.red(pixel);
        int g = Color.green(pixel);
        int b = Color.blue(pixel);

        int red = 0;
        int green = 0;
        int blue = 0;
        int pixelCount = 0;

        for (int y = 610; y < 670; y++) {
            for (int x = 330; x < 390; x++) {
                int c = bitmap1.getPixel(x, y);

                pixelCount++;
                red += Color.red(c);
                green += Color.green(c);
                blue += Color.blue(c);

            }
        }

        int averageColor = Color.rgb(red / pixelCount, green
                / pixelCount, blue / pixelCount);


        if (x != -1 && y != -1) {
            mResult.setText("veikia"  + " " + averageColor);
            mColorView.setBackgroundColor(Color.rgb(red / pixelCount, green
                    / pixelCount, blue / pixelCount));

        }
        return super.onTouchEvent(event);
    }

XML code

<org.opencv.android.JavaCameraView
    android:id="@+id/javaCameraView"
    android:layout_width="288dp"
    android:layout_height="512dp"
    android:layout_marginStart="50dp"
    android:layout_marginLeft="50dp"
    android:layout_marginTop="20dp"
    android:layout_marginEnd="50dp"
    android:layout_marginRight="50dp"
    android:layout_marginBottom="14dp"
    app:layout_constraintBottom_toTopOf="@+id/textView6"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
...