imagesc
在 OpenCV 中的等价物是什么?
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);
这与matlab中的imshow
函数非常接近。
这取决于你在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,并使用 matplotlib.pyplot
模块的 imshow
函数进行下一步操作:
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(比例尺),您可以自由选择任何想要的内容...
imagesc
函数也会适当地缩放图像。例如在 OpenCV 中,如果您有一个 CV_64F
类型的图像,其值超出了 [0,1]
的范围,则需要将它们映射到期望的范围内才能显示图像。 - Amro
cv::normalize
来泛化代码,将图像归一化到其数据类型的范围内,就像你在链接的帖子中在MATLAB中所做的那样。 - AmroMat A_scaled = (mydata - Amin)/(Amax - Amin)
。 - Katsu