OpenCV: как преобразовать мат CV_8UC1 в CV_8UC3
Как конвертировать CV_8UC1 Mat в CV_8UC3 с OpenCV?
Mat dst;
Mat src(height, width, CV_8UC1, (unsigned char*) captureClient->data());
src.convertTo(dst, CV_8UC3);
но dst.channels() = 1
3 ответа
Я обнаружил, что лучший способ сделать это:
cvtColor(src,dst,CV_GRAY2RGB);
Изображение будет выглядеть так же, как когда оно было в оттенках серого CV_8UC1, но это будет 3-канальное изображение типа CV_8UC3.
Соглашение о том, что для типа CV_8UC3
, значения пикселей варьируются от 0
в 255
и для типа CV_32FC3
от 0.0
в 1.0
, Таким образом, вам нужно использовать коэффициент масштабирования 255.0
, вместо 1.0
:
Mat::convertTo(newImage, CV_32FC1, 255.0);
Из документации по convertTo
void Mat:: convertTo (Mat & m, int rtype, двойная альфа =1, двойная бета = 0) const
rtype - желаемый тип матрицы назначения, а точнее, глубина (так как количество каналов будет таким же, как у исходного). Если rtype отрицателен, матрица назначения будет иметь тот же тип, что и источник.
Вы хотите создать матрицу для каждого из 3 каналов, которые хотите создать, и затем использовать функцию слияния. Смотрите ответы на этот вопрос