Как объединить два мата в OpenCV Android - PullRequest
0 голосов
/ 27 сентября 2018

Я использую функцию submat, чтобы вырезать часть изображения и выполнил некоторую обработку.Теперь у меня есть два мата для использования.

Mat originalMat = new Mat();
Utils.bitmapToMat(originalBmp, originalMat);
Rect rect = new Rect(left, top, right - left, bottom - top);
Mat roi_img = originalMat.submat(rect);
Imgproc.cvtColor(roi_img, roi_img, Imgproc.COLOR_BGR2Lab);
#some processing to roi_img....
Imgproc.cvtColor(roi_img, roi_img, Imgproc.COLOR_Lab2BGR);

Я считаю, что функция cvtColor может изменить ссылку на roi_img.Обработка отключена для originalMat.OriginalMat такой же, как и раньше.Я хочу объединить оригинал и roi_img.

Я пытаюсь использовать функцию копирования и клонирования, но она не работает.

        Mat mat = new Mat();
        Utils.bitmapToMat(originalBmp, mat);
        Rect rect = new Rect(40, 40, 100, 100);
        Mat roi_img = mat.submat(rect);
        double[] value = new double[]{255, 255, 255};
        Imgproc.cvtColor(roi_img, roi_img, Imgproc.COLOR_BGR2Lab);
        for (int i = 0; i < roi_img.rows(); i++) {
            for (int j = 0; j < roi_img.cols(); j++) {
                roi_img.put(i, j, value);
            }
        }
        Imgproc.cvtColor(roi_img, roi_img, Imgproc.COLOR_Lab2BGR);

        Mat roi_img2 = mat.submat(rect);
//        roi_img2 = roi_img.clone();
        roi_img.copyTo(roi_img2);
        showMat(mat);

1 Ответ

0 голосов
/ 27 сентября 2018

Я сделал ошибку.Я должен использовать функцию cvtColor на originalMat.

...