04-28 14:02
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[OpenCV] Color Map 본문

Programming/OpenCV

[OpenCV] Color Map

cinema4dr12 2015. 9. 27. 21:18

이번 글에서는 OpenCV의 applyColorMap 함수를 이용하여 Color Map을 적용하는 법에 대하여 알아보겠습니다.

Color Map이란?

가령 미국 지도 상에 여러 지역의 온도를 표현한다고 해보자. 회색조 이미지로 지도 상에 온도 데이터를 입힐 수 있습니다. 즉, 차가운 온도는 어두운 색으로 더운 온도는 밝은 색으로 표현하는 것입니다. 이렇게 표현하는 것은 매우 지루할 뿐만아니라 표현에 있어 다음 두 가지 큰 약점을 가지고 있습니다:


첫째, 인간의 시각 인식 체계는 회색조 강도에 대한 변화를 인식하기에 최적화 되어 있지 않습니다. 우리는 컬러 변화를 더 잘 인식합니다.

둘째, 우리는 다양한 컬러에 다른 의미를 연관시킵니다. 파란색을 시원한 온도로, 빨간색을 따뜻한 색으로 표현하는 것이 더 의미가 있습니다.


온도 데이터는 하나의 예이지만, 데이터를 시각화하는데 있어 단일 데이터 값이라도 다양한 컬러로 변환하는 것이 의미있는 수많은 경우들이 존재합니다. 다음은 OpenCV가 기본으로 제공하는 컬러맵의 예들입니다.


ValueNameScale
0COLORMAP_AUTUMNcolorscale_autumn
1COLORMAP_BONEcolorscale_bone
2COLORMAP_JETcolorscale_jet
3COLORMAP_WINTERcolorscale_winter
4COLORMAP_RAINBOWcolorscale_rainbow
5COLORMAP_OCEANcolorscale_ocean
6COLORMAP_SUMMERcolorscale_summer
7COLORMAP_SPRINGcolorscale_spring
8COLORMAP_COOLcolorscale_cool
9COLORMAP_HSVcolorscale_hsv
10COLORMAP_PINKcolorscale_pink
11COLORMAP_HOTcolorscale_hot


applyColorMap 함수 Prototype

void applyColorMap(InputArray src, OutputArray dst, int colormap);

Example Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "opencv2/opencv.hpp"
#include <iostream>
 
using namespace std;
using namespace cv;
 
 
/*/////////////////////////////////////
@ function: colormap_name
    return: name of the colormap
*//////////////////////////////////////
string colormap_name( int id )
{
    switch( id ){
        case COLORMAP_AUTUMN :
            return "COLORMAP_AUTUMN";
        case COLORMAP_BONE :
            return "COLORMAP_BONE";
        case COLORMAP_JET :
            return "COLORMAP_JET";
        case COLORMAP_WINTER :
            return "COLORMAP_WINTER";
        case COLORMAP_RAINBOW :
            return "COLORMAP_RAINBOW";
        case COLORMAP_OCEAN :
            return "COLORMAP_OCEAN";
        case COLORMAP_SUMMER:
            return "COLORMAP_SUMMER";
        case COLORMAP_SPRING :
            return "COLORMAP_SPRING";
        case COLORMAP_COOL :
            return "COLORMAP_COOL";
        case COLORMAP_HSV :
            return "COLORMAP_HSV";
        case COLORMAP_PINK :
            return "COLORMAP_PINK";
        case COLORMAP_HOT :
            return "COLORMAP_HOT";
         
    }
     
    return "NONE";
}
 
 
/*/////////////////////////////////////
@ function: main
*//////////////////////////////////////
int main()
{
    /// Read 8-bit grayscale image
    cv::Mat im = cv::imread( {YOUR_IMAGE_PATH}, IMREAD_GRAYSCALE );
 
    cv::Mat im_out = cv::Mat::zeros( 600800, CV_8UC3 );
 
    forint i = 0 ; i < 4 ; i++ )
    {
        forint j = 0 ; j < 3; j++ )
        {
            int k = i + j * 4;
            cv::Mat im_color = im_out( Rect( i * 200, j * 200200200 ) );
            cv::applyColorMap( im, im_color, k );
            cv::putText( im_color, colormap_name( k ), Point( 30180 ), CV_FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar::all( 255 ), 1, CV_AA );
        }
    }
     
    cv::imshow( "Pseudo Colored", im_out );
    cv::waitKey(0);
}
cs

Results

Original Image


Result Images


Comments