我正在尝试均衡一个1通道图像:
img = cv2.equalizeHist(img)
但是因为它是一个float64 img,我收到以下错误:
错误:(-215)_src.type()== CV_8UC1 in function equalizeHist
我该怎么做?
答案 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)