Вычитание двух матриц с разными размерами, ошибка OpenCV

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

Проблема в том, что я получаю матричную ошибку, потому что у меня разные размеры матрицы.

Я нашел решение, которое мне нужно применить, чтобы повернуть и перевести, чтобы получить первое изображение на втором (значения, которые я должен применить ко второй матрице)

Это мой код:

    Size size(image2.cols, image2.rows);

Mat dest = cv::Mat::zeros(image2.rows, image2.cols, CV_32FC2);

warpAffine(image2, dest, t, size);

namedWindow("manipulated img", CV_WINDOW_NORMAL);
imshow("manipulated img", dest);

Mat output;

cout << image1.size() << endl;
cout << dest.size() << endl;

bitwise_and(dest, image1, output);

//subtract(dest, image1, output);
namedWindow("output img", CV_WINDOW_NORMAL);
imshow("output img", output);

Я получаю следующую ошибку:

> [3722 x 2937]
> [3722 x 2932]
> OpenCV Error: Sizes of input arguments do
> not match (The operation is neither 'a rray op array' (where arrays
> have the same size and type), nor 'array op scalar' , nor 'scalar op
> array') in cv::binary_op, file C:\builds\master_PackSlave-win32
> -vc12-shared\opencv\modules\core\src\arithm.cpp, line 1573

Я думаю, что я знаю, в чем проблема, но я не знаю, что решение.

Матрицы имеют разные размеры

image1.size() = [3722 x 2937]
dest.size() = [3722 x 2932]

Что я могу сделать, чтобы решить это?

0

Решение

Я подозреваю, что вам просто нужно сделать dest быть размером с image1не image2, Есть очень хороший шанс, что warpAffine справится нормально.

1

Другие решения

  1. Создайте новую матрицу (newDest) того же размера, что и image1
  2. Установить новыйДест в ноль
  3. Скопируйте матрицу dest в newDest в интересующую область (вы можете установить left, top на 0,0, если вы хотите, чтобы новая матрица находилась в верхнем углу)

Как это:

src.copyTo(dst(Rect(left, top, src.cols, src.rows))); // left and top are the x,y position of where this Mat is going

Аналогичная ссылка:
Скопируйте cv :: Mat внутри ROI другого

0

По вопросам рекламы [email protected]