4

imagesc在 OpenCV中相当于什么?

4

2 回答 2

7

要在 imagesc 中获得漂亮的颜色,您必须稍微使用一下 OpenCV。在 OpenCV 2.46 中有一个颜色图选项。

这是我在 C++ 中使用的代码。我确定它在 Python 中非常相似。

mydata.convertTo(display, CV_8UC1, 255.0 / 10000.0, 0); 
applyColorMap(display, display, cv::COLORMAP_JET);
imshow("imagesc",display);

图像数据或矩阵数据存储在mydata. 我知道它的最大值为 10000,所以我将它缩小到 1,然后乘以 CV_8UC1 的范围,即 255。如果你不知道范围是什么,最好的选择是首先以同样的方式转换你的矩阵正如 Matlab 所做的那样

编辑

这是一个自动规范化数据的版本。

float Amin = *min_element(mydata.begin<float>(), mydata.end<float>());
float Amax = *max_element(mydata.begin<float>(), mydata.end<float>());
Mat A_scaled = (mydata - Amin)/(Amax - Amin);
A_scaled.convertTo(display, CV_8UC1, 255.0, 0); 
applyColorMap(display, display, cv::COLORMAP_JET);
imshow("imagesc",display);
于 2013-09-22T22:54:20.363 回答
2

imshow在matlab中很接近。

这取决于您在 python 中使用的模块:

import cv2
import cv2.cv as cv

I_cv2 = cv2.imread("image.jpg")
I_cv = cv.LoadImage("image.jpg")

#I_cv2 is numpy.ndarray norm can be done easily
I_cv2_norm = (I_cv2-I_cv2.min())/(I_cv2.max()-I_cv2.min())
cv2.imshow("cv2Im scaled", I_cv2_norm)

#Here you have to normalize your cv iplimage as explain by twerdster to norm
cv.ShowImage("cvIm unscaled",I_cv)

我认为接近 imagesc 的最好方法是使用cv2.imread哪个加载图像作为 numpy.ndarray 和模块中imshow的下一个使用函数matplotlib.pyplot

import cv2
from matplolib.pyplot import imshow, show
I = cv2.imread("path")
#signature:
imshow(I, cmap=None, norm=None, aspect=None, interpolation=None,
             alpha=None, vmin=None, vmax=None, origin=None, extent=None,
             **kwargs)

在这里你可以选择你想要的任何东西,如果标准化或你的clims(规模)......

于 2013-09-22T20:04:43.523 回答