OpenCV中与imagesc相当的函数是什么?

4

imagesc 在 OpenCV 中的等价物是什么?

2个回答

7
要在imagesc中获得漂亮的颜色,您需要稍微尝试一下OpenCV。在OpenCV 2.46中有一种称为colormap的选项。
以下是我在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);

1
也许你应该使用cv::normalize来泛化代码,将图像归一化到其数据类型的范围内,就像你在链接的帖子中在MATLAB中所做的那样。 - Amro
1
@twerdtser:我认为你应该改成Mat A_scaled = (mydata - Amin)/(Amax - Amin) - Katsu

2

这与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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接