OpenCV python包装器中是否有与OpenCV 2中Mat的convertTo方法相同的功能?
我基本上想在python中调用这个函数
out.convertTo( out, CV_32F, 1.0/255, 0 );
其中out是灰度图像。
我已经通过将我的dst参数保持为CV_32FC1类型来使用cv.ConvertScale,但我试图保持我的python代码尽可能符合cv2。有线索吗?
答案 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)