错误:(-215)_src.type()== CV_8UC1函数equalizeHist尝试均衡float64图像时

时间:2016-09-29 08:14:19

标签: python opencv numpy

我正在尝试均衡一个1通道图像:

img = cv2.equalizeHist(img)

但是因为它是一个float64 img,我收到以下错误:

  

错误:(-215)_src.type()== CV_8UC1 in function equalizeHist

我该怎么做?

5 个答案:

答案 0 :(得分:3)

函数equalizeHist是图像的直方图均衡,仅适用于CV_8UC1类型,即单通道8位无符号整数类型。

要将图像转换为此类型,您可以使用具有目标类型的函数convertTo(必须使用相同数量的通道)。

确保源图像具有正确的值范围,通常浮点图像被解释为0 =黑色,1 =白色,灰色范围介于两者之间,而整数图像被解释为0 =黑色,最大值=白色(对于无符号8位类型,它将为255)。因此,您通常需要将源图像乘以255才能适合该范围。函数convertTo有一个参数可以在转换过程中缩放您的值,与手动缩放相比,这可以提高速度。

答案 1 :(得分:2)

初始化图像变量时,不要忘记标志,它为我解决了问题。

img = cv2.imread("my_image.png", 0)

我使用 0 作为标志,因为我正在处理灰度图像。

答案 2 :(得分:0)

您也可以使用 .astype (numpy.uint8)。

答案 3 :(得分:0)

因此,基本上直方图均衡化适用于灰度图像。 因此,如果您想对彩色图像进行直方图均衡,则可以使用此代码。

R, G, B = cv2.split(img)

output1_R = cv2.equalizeHist(R)
output1_G = cv2.equalizeHist(G)
output1_B = cv2.equalizeHist(B)

equ = cv2.merge((output1_R, output1_G, output1_B))

答案 4 :(得分:0)

读取图像并将其转换为灰色后。使用
img = np.float32(img)