python - 在Python中的OpenCV mat :: convertTo

时间:2013-04-23 06:13:13

标签: python opencv

OpenCV python包装器中是否有与OpenCV 2中Mat的convertTo方法相同的功能?

我基本上想在python中调用这个函数

out.convertTo( out, CV_32F, 1.0/255, 0 );

其中out是灰度图像。

我已经通过将我的dst参数保持为CV_32FC1类型来使用cv.ConvertScale,但我试图保持我的python代码尽可能符合cv2。有线索吗?

3 个答案:

答案 0 :(得分:11)

你可以简单地使用Numpy函数。

例如:

res = np.float32(out)

缩放,你必须单独做:

res = res*scaling_factor

答案 1 :(得分:9)

如果您不想转换数据类型,请使用:

cv2.convertScaleAbs(image, result, alpha, beta)

其中alpha是比例因子,β是转换值。 More details in the OpenCV docs.

答案 2 :(得分:0)

在OP中,

  

0<乘数< 1,

所以你不必担心下溢或溢出。 Adid Rahman K和knipknap的解决方案可以正常使用。他们应该很快。

如果出于任何原因,您需要乘数> 1,那么你可以遇到溢出问题。也就是说,该值不足以适合所选的数据类型。大多数OpenCV函数将通过截断到数据类型的最大值来处理溢出。不过,NumPy只会“滚动”#34;值(例如,对于8位数据类型 - 最大值255 - OpenCV将强制260变为255,但NumPy将强制260到4!)。

因此,为了处理8位灰度图像并处理欠/流,请执行以下操作:

img2 = np.int16(img1)     # convert to signed 16 bit integer to allow overflow
img2 = scale_factor*img2  # apply scale factor
img2 = clip(img2, 0, 255) # force all values to be between 0 and 255

# after clip img2 is effectively unsigned 8 bit, but make it explicit:
img2 = np.uint8(img2)