OpenCV python 包装器中是否有与 OpenCV 2 中 Mat 的 convertTo 方法相同的功能?
我基本上想在python中调用这个函数
out.convertTo( out, CV_32F, 1.0/255, 0 );
其中 out 是灰度图像。
我已经通过将我的 dst 参数保持为 CV_32FC1 类型来使用 cv.ConvertScale,但我试图让我的 python 代码尽可能地与 cv2 一致。有什么线索吗?
您可以为此简单地使用 Numpy 函数。
例如:
res = np.float32(out)
缩放,你将不得不单独做:
res = res*scaling_factor
如果您不尝试转换数据类型,请使用以下命令:
cv2.convertScaleAbs(image, result, alpha, beta)
其中 alpha 是您的比例因子,而 beta 是移位值。 OpenCV 文档中的更多详细信息。
在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)