Как я могу суммировать два изображения (тип Mat) в opencv и поместить результат в другое изображение? [Дубликат]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

4
задан fakeaccount 18 February 2015 в 18:32
поделиться

2 ответа

Это зависит от того, что вы хотите добавить . Например, у вас есть два 3x3 Mat:

cv::Mat matA(3, 3, CV_8UC1, cv::Scalar(20));
cv::Mat matB(3, 3, CV_8UC1, cv::Scalar(80));

Вы можете добавить matA и matB к новому Matrix 3x3 со значением 100, используя операцию matrix :

auto matC = matA + matB;

Или используя операцию массива cv :: add , которая выполняет ту же работу:

cv::Mat matD;
cv::add(matA, matB, matD);

Или даже смешивание два изображения с помощью cv :: addWeighted :

cv::Mat matE;
cv::addWeighted(matA, 1.0, matB, 1.0, 0.0, matE);

Иногда вам нужно объединить два мата, например, создать Matrix 3x6, используя cv :: Mat :: push_back :

cv::Mat matF;
matF.push_back(matA);
matF.push_back(matB);

Даже сливайтесь в двухканальный 3x3 мат, используя cv :: merge :

auto channels = std::vector<cv::Mat>{matA, matB};
cv::Mat matG;
cv::merge(channels, matG);

Подумайте о том, что вы хотите добавить и выбрать правильную функцию.

21
ответ дан mcchu 17 August 2018 в 19:54
поделиться

Вы можете использовать push_back ():

newMat.push_back(Mat1);
newMat.push_back(Mat2);
6
ответ дан zedv 17 August 2018 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: