Выберите часть cv :: Mat на основе ненулевых пикселей другого Mat? - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь обновить часть мата на основе другого мата. Например, я хочу выбрать часть img, которая не равна нулю в mask, и добавить к ней постоянное значение. Когда я пытаюсь это сделать:

Mat mask = imread("some grayscale image with a white area in a black background", IMREAD_GRAYSCALE);
Mat img = Mat::zeros(mask.rows, mask.cols, CV_8UC1);
Mat bnry, locations;
threshold(mask, bnry, 100, 255, THRESH_BINARY);
findNonZero(bnry, locations);
img(locations) += 5;

Я получаю эту ошибку:

Ошибка: утверждение не удалось ((int) range.size () == d)

img и mask имеют одинаковый размер.

Как выбрать область изображения на основе другого изображения (маски)?

1 Ответ

1 голос
/ 27 января 2020

Многие функции OpenCV по умолчанию поддерживают маску, другими словами, вам не нужно находить ненулевые значения, и на основании этой операции суммирования вам просто нужно использовать функцию cv::add, которая по умолчанию поддерживает маску в качестве аргумента

cv::add(img,10,img,mask);  // 10 is an arbitrary constant value

А по поводу вашего кода

img(locations) += 5;

Насколько я знаю, у нас нет таких перегруженных operator+ в OpenCV для использования.

...