2013-09-04 3 views
1

Im, использующий OpenCV, и у меня есть объект Mat размером 1024 * 1024 (извлеченный из фотографии и обработанный), а значения находятся в диапазоне [1..25] .for например:Создание изображения из объекта Mat в OpenCV

Mat g; 
g=[1,5,2,14,13,5,22,24,5,13....; 
21,12,...; 
.. 
.]; 

Я хочу, чтобы представить эти значения как image.It только иллюстрация изображение, чтобы показать различную область, каждая область с цветом. Например: все значения, равные 1 = красный, все значения, равные 14 = синий, и т. Д.

, а затем создайте и отобразите это фото.

У кого-нибудь есть идея, как я должен продолжать?

Спасибо!

ответ

0

есть colormaps, но они не помогут, если ваши данные находятся в диапазоне [0..25]. так что вы, вероятно, определяется свернуть свою собственную версию, что:

Vec3b lut[26] = { 
     Vec3b(0,0,255), 
     Vec3b(13,255,11), 
     Vec3b(255,22,1), 
     // all the way down, you get the picture, no ? 
    }; 

    Mat color(w,h,CV_8UC3); 
    for (int y=0; y<h; y++) { 
     for (int x=0; x<w; x++) { 
      color.at<Vec3b>(y,x) = lut[ g.at<uchar>(y,x) ]; 
      // check the type of "g" please, i assumed CV_8UC1 here. 
      // if it's CV_32S, use g.at<int> , i.e, you need the right type here 
     } 
    } 
+0

@ berak..thanks так этот код работает отлично. Хотя мне приходилось выбирать значения элементов «lut» вручную, используя подходящие значения пикселей, но это нормально, если он работает нормально. Когда я пытался использовать colormaps, у меня было черное изображение, и я не знаю, почему. Возможно, из-за типа Mat или чего-то еще, но без проблем я все равно использовал другой способ. Еще раз спасибо :) – triple13

1

Если вы не слишком суетились какие цвета вы получите, вы можете масштабировать ваши данные (так что почти заполняет 0 до 255 диапазон), а затем использовать встроенный Colormap. , например.

cv::Mat g = ... 
cv::Mat image; 
cv::applyColorMap(g * 10, image, COLORMAP_RAINBOW); 

См applyColorMap() doco

+0

Я пробовал, но я получаю черное изображение, когда я пытаюсь использовать colormaps, я не знаю, почему .. все равно :) – triple13

+0

@ triple13 Цветовая палитра радуги даже не содержит черного цвета, поэтому вы сделали что-то действительно неправильно. – Bull

+0

Да, я знаю. Проблема, о которой я думаю, это тип моего Mat, потому что, если я загружаю нормальный образ с помощью 'imread', а затем применяю colormaps, он отлично работает – triple13

Смежные вопросы