mrgloom 242 Жалоба Опубликовано July 19, 2012 пытаюсь написать код, что на входе 2 фрейма разного размера, а на выходе они приводятся к одному общему размеру, непонятен момент как изменить Mat если = это всего лишь ссылка, без копирования? void resize(Mat& frame0,Mat& frame1) { int w= MAX(frame0.cols,frame1.cols); int h= MAX(frame0.rows,frame1.rows); Mat t0(h,w,frame0.type()); t0=0; Mat t1(h,w,frame1.type()); t1=0; if(frame0.cols<w||frame0.rows<h) { frame0.copyTo(t0); frame0=t0; } if(frame1.cols<w||frame1.rows<h) { frame1.copyTo(t1); frame1=t1; } } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 19, 2012 Если я првильно понял задачу, то так должно работать. //----------------------------------------------------------------------------------------------------- // //----------------------------------------------------------------------------------------------------- void resize(Mat& frame0,Mat& frame1) { int w= MAX(frame0.cols,frame1.cols); int h= MAX(frame0.rows,frame1.rows); Mat t0(h,w,frame0.type()); t0=0; Mat t1(h,w,frame1.type()); t1=0; if(frame0.cols<w||frame0.rows<h) { frame0.copyTo(t0(Rect(0,0,frame0.cols,frame0.rows))); frame0=t0.clone(); } if(frame1.cols<w||frame1.rows<h) { frame1.copyTo(t1(Rect(0,0,frame1.cols,frame1.rows))); frame1=t1.clone(); } }[/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано July 19, 2012 frame0=t0.clone(); а что насчёт утечки? т.е. куда денется, то что было в матрице до операции? или операция = имеет разный смысл в зависимости от правой части? что то работа с Mat для меня стала какая то не очевидная. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано July 19, 2012 спрошу еще тут, допустим чтобы получить доступ к пикселю я пишу double t= m1.at<double>(j,i); а что если я не знаю какого типа приходит матрица m1 из функции или может быть много вариантов её типа? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 19, 2012 спрошу еще тут, допустим чтобы получить доступ к пикселю я пишу а что если я не знаю какого типа приходит матрица m1 из функции или может быть много вариантов её типа? Я думаю, тут единственный выход - в функции проверять тип элементов матрицы и делать для каждого типа свою обработку. Посмотрел в opencv-шные исходники, вроде они так и делают. ЗЫ: Обратите внимание, что некоторые ф-ции фозвращают Mat, а некоторые MatExpr. Это к предыдущему вопросу о копировании. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах