如何使用C ++和OpenCV生成热图片?

时间:2015-07-02 15:09:48

标签: c++ opencv

我正在做我的学校项目。我使用网格眼来访问环境温度。数据形式是64像素阵列(8x8 2D阵列)。现在我想使用这个数组来生成热图片。我可以简单地将值复制到Matlab,缩放它,并使用图像(温度)来输出像这样的图片

enter image description here

红色和黑色越多表示越热。 但是我用C ++构建了所有程序。所以我必须找到一种方法在C ++中做同样的事情。我首先要做的就是OpenCV。经过一番搜索,我只为灰度垫写了一个简单的代码。但这张照片看起来很奇怪。

enter image description here

这是我的代码:

void GridEye::showCV() {
    // > threshold means this pixel contain heat object.

    for (int i = 0; i < 64; ++i) {
        if (temperature[i] > threshold) forimage[i] = 255;
        else forimage[i] = 0;
    } 

    Mat image(8, 8, CV_8UC1, forimage);
    resize(image, image, Size(640, 640)); // to make picture larger
    namedWindow("Display window", WINDOW_AUTOSIZE);
    imshow("Display window", image);
    waitKey(100);
}

我的代码有问题吗?或者使用其他库的一些建议,因为我对OpenCV并不熟悉。

1 个答案:

答案 0 :(得分:1)

尝试类似:

Mat1f image(8, 8, temperature);
//threshold(image, image, your_threshold_value, 0, THRESH_TOZERO); // << Uncomment this line to apply a threshold 
normalize(image, image, 0, 1, NORM_MINMAX);
imshow("original size", image);
Mat resized;
//resize(image, resized, Size(640, 640)); // << Apply bilinear interpolation
resize(image, resized, Size(640, 640), 0, 0, INTER_NEAREST);
imshow("resized", resized);
waitKey();