2016-03-15 3 views
0

Я пытаюсь повернуть и сдвинуть мат в одно и то же время. Моя первая матрица исходит из следующей инструкции:Как я могу выполнить композицию Матов с emgu (C#)?

CvInvoke.GetRotationMatrix2D (новая точка (0, 0), ia.getAngle(), 1.0, вращение);

Мой второй матричная исходит из следующих инструкций:

Mat translation = CvInvoke.GetAffineTransform(t1, t2); 

где t1 и t2 являются вершинами двух треугольников я не хочу использовать ту матрицу. Я хочу выполнить операцию с Mat.

Как я могу умножить эти две матрицы, чтобы получить окончательный вариант, который я буду использовать для применения метода CvInvoke.WarpAffine.

Я пробовал: cvInvoke.Multiply, он не преобразует изображение. Я в настоящее время пытается CvInvoke.Gemm(rotation, translation, 1.0, null, 0.0, final); но происходит исключение:

(Необработанное исключение типа 'Emgu.CV.Util.CvException' произошло в Emgu.CV.World.dll Дополнительная информация: OpenCV: a_size .width == len)

Любая помощь была бы принята с благодарностью.

ответ

0

Мой плохой. Когда перевод находится в игре, матрицы должны иметь размер 3x3. Поэтому я изменил свой код и использовал следующие методы: CvInvoke.FindHomography (t1, t2, H); CvInvoke.WarpPerspective (img, big_img, H, ROIRotatedArea.Size); где t1 - точки исходного изображения, а t2 - соответствующие точки преобразованного изображения, а H - матрица преобразования. t1, t2 и H имеют тип матрицы.

Надеюсь, что когда-нибудь это поможет.