Мне нужно создать cv :: Mat из буфера, но я не хочу, чтобы данные распределялись, поэтому я не могу использовать конструктор Mat (высота, ширина, тип, данные):
int data[100];
cv::Mat m;
m.create(10, 10, CV_32SC1); // allocate own buffer for m
for (size_t i = 0; i < 100; ++i)
{
reinterpret_cast<int*>(m.data)[i] = data[i];
}
Мне нужно привести внутренний буфер (который всегда uchar *), чтобы иметь возможность напрямую копировать данные моего желаемого типа (в данном случае int), и это похоже на работу. Однако я напоминаю, что документы предпочитали метод выполнения всех операций с использованием uchar *, то есть приведение исходного буфера к uchar * и использование параметра stepWidth для получения правильного смещения в uchar * -единицах. Попаду ли я в неприятности, если сделаю это наоборот, или буфер Mat типа CV_32SC1 просто буфер int, и это не имеет значения?