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

syf*_*yfy 5 python opencv numpy

我正在尝试像这样均衡 1 个单通道图像:

img = cv2.equalizeHist(img)
Run Code Online (Sandbox Code Playgroud)

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

错误:(-215) _src.type() == CV_8UC1 在函数 equalizeHist 中

我该怎么做?

ANK*_*TYA 6

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


小智 6

所以基本上直方图均衡适用于灰度图像。所以如果你想在彩色图像上做直方图均衡,你可以使用这个代码。

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))
Run Code Online (Sandbox Code Playgroud)


Mic*_*cka 5

函数equalizeHist是图像的直方图均衡化,仅针对CV_8UC1类型实现,CV_8UC1类型是单通道8位无符号整数类型。

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

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