OpenCV python包装器中是否有任何函数与OpenCV2中的Mat的convertTo方法做同样的事情?
我基本上想在python中调用这个函数
out.convertTo( out, CV_32F, 1.0/255, 0 );
其中out为灰度图像。
我已经使用了cv。通过将我的dst参数保持为类型CV_32FC1来转换,但我试图使我的python代码尽可能保持cv2一致性。 有什么线索吗?
OpenCV python包装器中是否有任何函数与OpenCV2中的Mat的convertTo方法做同样的事情?
我基本上想在python中调用这个函数
out.convertTo( out, CV_32F, 1.0/255, 0 );
其中out为灰度图像。
我已经使用了cv。通过将我的dst参数保持为类型CV_32FC1来转换,但我试图使我的python代码尽可能保持cv2一致性。 有什么线索吗?
在OP中,
0<乘数<1,
所以你不必担心下溢或溢出。 来自Adid Rahman K和knipknap的解决方案将工作得很好。 他们应该很快。
如果出于任何原因,您需要乘数>1,那么您可能会遇到溢出问题。 也就是说,该值不足以适应所选数据类型。 大多数OpenCV函数将通过截断到数据类型的最大值来处理溢出。 NumPy,虽然,将只是"滚过"值(例如,对于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)
如果您不尝试转换数据类型,请使用此:
其中alpha是比例因子,beta是移位值。 OpenCV文档中的更多详细信息。