Я использую openCV в первый раз. Я использую openCV3 и XCode для кодирования. Я хочу создать 16-битное изображение в градациях серого, но я хочу, чтобы данные, которые у меня есть, были определены так, чтобы 4000 было значением пикселя для белого и 0 для черного. У меня есть информация для этих пикселей в массиве типа int. Как я могу создать Mat и присвоить значения в массиве Mat?
short data[] = { 0,0,4000,4000,0,0,4000, ...};
Mat gray16 = Mat(h, w, CV_16S, data);
опять же, типы должны совпадать. для 16 бит, вам нужно CV_16S и short
массив, для 8-битного CV_8U и массив uchar *, для плавающего CV_32S и плавающего * ….
Вы можете создать свой коврик с
cv::Mat m(rows, cols, CV_16UC1);
но, насколько мне известно, нет никакого способа определить пользовательское значение для «белого», вам придется умножить м с std :: numeric_limits :: max / 4000. Однако это необходимо только при отображении изображения.
Таблица поиска может сделать то же самое (потенциально медленнее), см. Cv :: LUT. Однако, по-видимому, он поддерживает только 8-битные изображения.
редактировать: хорошо, я пропустил часть о назначении существующих значений массива; см. ответ Берака. Я надеюсь, что ответ все еще полезен.