Мне нужно создать объект Mat
типа CV_32FC2
для хранения координатных точек, содержащихся в структуре KeyPoint
. Я хочу сделать это внутри функции для ясности.Невозможно присвоить значения cv :: Mat внутри функции
void myfun(vector<KeyPoint>& k){
Mat p1_dist(1, k.size(), CV_32FC2);
for(int i=0; i<k.size(); i++){
p1_dist.at<double>(0, i)[0] = k1[i].pt.x;
p1_dist.at<double>(0, i)[1] = k1[i].pt.y;
}
}
Компилятор подчеркивает «p1_dist» внутри для цикла просят указатель на этот Мат. Если я напишу этот фрагмент кода внутри основной функции, ошибка не произойдет. Можете ли вы помочь мне указать на проблему?
Вы понимаете, что после выхода из функции 'p1_dist' будет разрушена, и все, что вы делаете внутри цикла будет не зря? Если вы хотите сохранить объект «Мат» живым, вы должны передать его в свою функцию как указатель, чтобы изменения, происходящие внутри тела функции, фактически оставались. – rbaleksandar
'p1_dist.at (0, i)' должен возвращать двойную ссылку, к которой нельзя получить доступ, как массив. Вы могли бы означать 'p1_dist.at (0, i)'. В противном случае я не буду следовать вашей проблеме с main. –
Вы должны отправить точное сообщение компилятора, у вас есть точный ответ. – gia