Перейти к содержимому
Compvision.ru
mrgloom

приравнять cv::Mat

Recommended Posts

пытаюсь написать код, что на входе 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;

	}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если я првильно понял задачу, то так должно работать.


//-----------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------
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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
frame0=t0.clone();

а что насчёт утечки? т.е. куда денется, то что было в матрице до операции? или операция = имеет разный смысл в зависимости от правой части?

что то работа с Mat для меня стала какая то не очевидная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спрошу еще тут,

допустим чтобы получить доступ к пикселю я пишу

double t= m1.at<double>(j,i);

а что если я не знаю какого типа приходит матрица m1 из функции или может быть много вариантов её типа?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спрошу еще тут,

допустим чтобы получить доступ к пикселю я пишу

а что если я не знаю какого типа приходит матрица m1 из функции или может быть много вариантов её типа?

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

Посмотрел в opencv-шные исходники, вроде они так и делают.

ЗЫ: Обратите внимание, что некоторые ф-ции фозвращают Mat, а некоторые MatExpr. Это к предыдущему вопросу о копировании.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×