Из документации здесь вы можете получить определенную строку через cv::Mat::row
, которая вернет новый cv::Mat
, по которому вы можете выполнять итерацию с cv::Mat::begin
и cv::Mat::end
. Таким образом, должно работать следующее:
cv::Mat m/*= initialize */;
// ... do whatever...
cv::Mat first_row(m.row(0));
std::vector<double> v(first_row.begin<double>(), first_row.end<double>());
Обратите внимание, что я не знаю OpenCV, но поиск в Google "OpenCV mat" привел непосредственно к документации по базовым типам, и в соответствии с этим, это должно работать нормально.
Матричные итераторы являются итераторами с произвольным доступом, поэтому их можно передавать любому алгоритму STL, включая std :: sort ().
Это также из документации, так что вы можете сделать это без копии:
cv::Mat m/*= initialize */;
// ... do whatever...
// first row begin end
std::vector<double> v(m.begin<double>(), m.begin<double>() + m.size().width);
Чтобы получить доступ больше, чем к первой строке, я бы порекомендовал первый фрагмент, поскольку в этом случае он будет намного чище, и нет необходимости выполнять тяжелое копирование, поскольку типы данных кажутся подсчитанными по ссылкам.