Различия в изображениях в OpenCV - PullRequest
0 голосов
/ 27 января 2012

Если у меня есть данные изображения imgA и imgB, то я бы хотел вычислить imgC следующим образом:

for (int i = 0; i < numPixelsInA; i++) {
    imgC[i] = max(0, imgA[i]-imgB[i]);
}

Я не вижу способа сделать это в openCV без записикод, который по сути как выше.Любопытно, если я что-то упускаю.

В качестве пояснения к вышесказанному, imgA и imgB - это OpenCV uchar, и поэтому, чтобы действительно работать над этим, строку следует заменить на:

imgC[i] = (uchar) max(0, ((int) imgA[i]) - ((int) imgB[i]));

Вот почему реализация OpenCV более привлекательна для меня, поскольку они правильно обрабатывают эти проблемы насыщения, и если / когда мы получим IPP, мы сможем получить соответствующие ускорения "бесплатно".

Ответы [ 2 ]

2 голосов
/ 27 января 2012

С более новой структурой в стиле C ++ cv::Mat вы можете выполнять простую арифметику, например, в матрицах напрямую.

cv::Mat A, B, C;
A = getImageA();
B = getImageB();

C = A - B;

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

0 голосов
/ 27 января 2012

Вы можете использовать комбинацию сравнить , чтобы создать маску, а затем добавить / вычесть, чтобы работать только с пикселями с установленной маской - но я бы просто сделал это так, как вы делаете!*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...