热门标签:
Q:

python-OpenCV mat::python中的convertTo

OpenCV python包装器中是否有任何函数与OpenCV2中的Mat的convertTo方法做同样的事情?

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

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

其中out为灰度图像。

我已经使用了cv。通过将我的dst参数保持为类型CV_32FC1来转换,但我试图使我的python代码尽可能保持cv2一致性。 有什么线索吗?

原网址
A:

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

例如: :

res = np.float32(out)

缩放,你将不得不分开做:

res = res*scaling_factor

所有回答

共 2 条

author avatar

如果您不尝试转换数据类型,请使用此:

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

其中alpha是比例因子,beta是移位值。 OpenCV文档中的更多详细信息。

author avatar

在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)

相似问题