OpenCV - абсдифф с маской - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь вычислить абсолютную разницу двух изображений, используя маску, поэтому при расчете разницы учитывается только область изображений. Но у OpenCV нет части маски в его функция . Я видел этот вопрос , но у меня он не работал. Я пытаюсь умножить результат в маске так, чтобы осталась только указанная область.

код:

Mat region = //a grayscale image containing a region of 255 and the rest is zero
Mat img1, img2 = //two images of the same size as the region image and of type CV_8UC1
Mat mask = region / 255; //to make a binary mask
Mat difference = Mat::zeros(region .rows, region .cols, CV_8UC1);

cv::absdiff(img1, img2, difference);
difference = difference * mask;
if (!difference.empty()) imshow("difference", difference);

При попытке этого я получаю сообщение об ошибке.

ошибка:

Ошибка: не удалось подтвердить (a_size.width == len) в cv :: gemm

, что происходит здесь:

inline
Mat& Mat::operator = (const MatExpr& e)
{
    e.op->assign(e, *this);
    return *this;
}

1 Ответ

1 голос
/ 10 февраля 2020

difference * mask означает, что вы выполняете Умножение матрицы , в этом случае высота разницы должна быть равна ширине маски, если вы хотите выполнить Умножение на элемент * вы должны позвонить difference.mul(mask)

...