Я новичок в openCV
и пытаюсь преобразовать изображение 16 bit
grayscale
в цветное изображение с использованием цветовой гаммы.Я сделал эту операцию, когда у меня есть 8 bit
изображение, но теперь я выбираю кадр изображения с тепловой камеры, который дает мне 16-битный кадр, и я не могу преобразовать это в 8 bit
, потому что это снижает качество изображения, котороебесполезно.В 8 bit
изображении я использую функцию LUT
для выполнения этой задачи.
Моя таблица поиска Код для 8-битного изображения
Mat palette, im;
palette = imread("1.bmp", IMREAD_COLOR);
im = imread("C:\\Users\\Chandrapal Singh\\Desktop\\New folder\\IMG_0_10_34_45_2018_1.bmp", IMREAD_GRAYSCALE);
im.convertTo(im, CV_16U);
cvtColor(im.clone(), im, COLOR_GRAY2BGR);
double scale = (double)palette.rows / 256;
uchar b[256], g[256], r[256];
int i = 0;
for (double x = 1; x <= palette.rows;) {
b[i] = palette.at<Vec3b>((int)x, palette.cols / 2)[0];
g[i] = palette.at<Vec3b>((int)x, palette.cols / 2)[1];
r[i] = palette.at<Vec3b>((int)x, palette.cols / 2)[2];
i++;
x += scale;
}
Mat channels[] = { Mat(256,1, CV_8U, b), Mat(256,1, CV_8U, g), Mat(256,1, CV_8U, r) };
Mat lut;
cv::merge(channels, 3, lut);
Mat color;
cv::LUT(im, lut, color);
В приведенном выше коде palette
- это цветовая гамма, а im
- это изображение в градациях серого.Я читаю цвет палитры и помещаю его в lut
, а затем с помощью функции LUT
просто создаю цветное изображение.
Итак, кто-нибудь может мне помочь, как я могу сделать выше с 16-битным изображением.Заранее спасибо.
Когда я запускаю этот код, я получаю исполнение, которое говорит: -
Я получаю исключение, которое говорит Assertion failed ((lutcn == cn || lutcn == 1) && _lut.total() == 256 && _lut.isContinuous() && (depth == 0 || depth == 1)) in cv:: LUT