2014-11-17 3 views
0

У меня есть матрица 50 x 50, имеющая определенные значения от 1 до 50. Мне нужно построить цветную карту для того же, используя OpenCV.openCV: Построение цветовой схемы из матрицы

Я уже сделал это в MATLAB (с помощью от this answer):

>> A = randi([10,60],100,100); 
>> colormap('hot') 
>> imagesc(A) 
>> colorbar  

И выход приходит как this.

Я хотел был бы сделать то же using openCV.

Как это исправить?

Я не могу понять, как я могу реализовать функцию «горячего», которая появляется, как это (см только горячий)

like this:

Кроме того, я хотел бы также быть заинтересованы в положить цветную полосу, как показанном на первом изображении.


Update (Final код, который я бегу)

К сожалению, до сих пор я не могу построить правильную карту цвета: Вот код MATLAB:

Примечание: это 10 по 100.

A = [0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9; ]

colormap ('hot'); imagesc (A) Colorbar

А вот выход:

enter image description here

Теперь я создал текстовый файл с теми же данными, и мой текстовый файл выглядит следующим образом:

enter image description here

И использовал следующий код для достижения того же результата, что и для MATLAB:

int main() 


{ 




ifstream Read("myfile.txt"); 

vector<int> nums; 
while (!Read.eof()) { 
    int n; 
    Read >> n; 
    nums.push_back(n); 
} 
// now make a Mat from the vector: 
Mat mat(nums); 

cout<<mat<<endl; //for testing 


Mat mat1d(nums); 
Mat mat2d = mat1d.reshape(1, 10); 
// 
Mat image; //create an empty image. (you can leave it empty ;) 
//// Apply the colormap, but on the 2d mat, not on the 2d vector, please: 
applyColorMap(mat2d, image, COLORMAP_JET); 
      // Show the result: 
imshow("colormap", image); 
waitKey(0); 
return 0; 
} 

Но результат вышеизложенного бессмыслен.

Мне нужно совместить результаты с MATLAB и Opencv.

+0

http://docs.opencv.org/modules/contrib/doc/facerec/colormaps.html – berak

+0

код, который вы показываете, кажется совершенно не связанным с вашим вопросом. – berak

+0

@berak Спасибо за ссылку. Да, мой подход был неправильным. Я, хотя я попытаюсь изменить этот код для 2d термического участка. – user3891236

ответ

1

вам придется перекроить 1d вектор, на 2-й мат:

// 
    // before doing anything else, CLEAN UP YOUR DAMN TXTFILE. 
    // it should contain nothing than numbers and spaces. 
    ifstream Read("m.txt"); 

    // be extra picky about the type here. 
    // we are reading in a 8bit grayscale map. 
    vector<uchar> nums; 
    for (int i=0; (i<100*10)&&(!Read.eof()); i++) { 
     int n; 
     Read >> n; 
     nums.push_back(n); 
    } 

    // now make a Mat from the vector: 
    Mat mat1d(nums); 
    Mat mat2d = mat1d.reshape(1, 10); 

    // your data is in the [0..9] range, so scale up to [0..255] uchar range 
    mat2d *= (255/10); 

    cout<<mat2d<<endl; //for testing 
    // 
    Mat image; //create an empty image. (you can leave it empty ;) 
    //// Apply the colormap, but on the 2d mat, not on the 2d vector, please: 
    applyColorMap(mat2d, image, COLORMAP_HOT); 
       // Show the result: 
    imshow("colormap", image); 
    waitKey(0); 

enter image description here

+0

спасибо. почему (1, 10)? – user3891236

+0

1 элемент (канал), 10 строк, пожалуйста [см. Здесь] (http://docs.opencv.org/trunk/modules/core/doc/basic_structures.html#mat-reshape) – berak

+0

OK !! Спасибо за вашу помощь. – user3891236

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