Python 在opencv中更改图像的比例和数据类型

Python 在opencv中更改图像的比例和数据类型,python,python-2.7,opencv,image-processing,Python,Python 2.7,Opencv,Image Processing,我正在读取一幅图像,试图将其数据类型更改为float32,并将值更改为范围0-1。这是我的密码: img = cv2.imread('sample.png') fg = np.ones_like(img)*255 fg[(img >0).any(-1)] = 0 fg = cv2.convertScaleAbs(fg, 1.0/255.0, cv2.CV_32FC3) 但是当我检查fg的dtype和min和max时,它会显示uint8和0和255。我做错了什么?不要使用cv2.conve

我正在读取一幅图像,试图将其数据类型更改为float32,并将值更改为范围
0-1
。这是我的密码:

img = cv2.imread('sample.png')
fg = np.ones_like(img)*255
fg[(img >0).any(-1)] = 0
fg = cv2.convertScaleAbs(fg, 1.0/255.0, cv2.CV_32FC3)

但是当我检查
fg
dtype
min和max
时,它会显示
uint8
0和255
。我做错了什么?

不要使用
cv2.convertScaleAbs
您应该将其替换为:

fg = fg / 255.0
现在,当您在
fg
中检查最小值和最大值时,它们将返回如下:

np.min(fg)
Out[150]: 0.0

np.max(fg)
Out[151]: 0.0
更新: 您也可以尝试:

fg = np.float32(fg / 255)

你试过阅读吗?我想不会,因为它说的第一件事是“缩放、计算绝对值,并将结果转换为8位。”(我的重点)|更不用说你传递了错误的参数--
1.0/255.0
,以及枚举
cv2.CV_32FC3
作为alpha的任何值。好吧,我没有注意到这一点。道歉。但是,在C++版本中,什么是等价的<代码>转换为< /Case>函数?你应该使用<代码> fg= fg.asype(np.FulAT32)转换为<代码>浮点< /C> >使用NoMy: <代码> NP.FLAAT32(FG/255)< /代码>:用浮点值除法将给你一个FLAUT64结果,我知道我可以使用numpy,但我一直在寻找
convertTo
选项的替代方案