gpt4 book ai didi

python - 从 C++ 到 Python 的 OpenCV absdiff 等价物

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:22 25 4
gpt4 key购买 nike

这是来自 C++ 的示例:

cv::absdiff(input,cv::Scalar(target),output);

其中 targetcv::Vec3b [190, 119, 102]

我在 Python 中尝试了以下内容:

output = cv2.absdiff(image,  np.array([190, 119, 102]) )

这失败了:

Error: Assertion failed (type2 == 6 && (sz2.height == 1 || sz2.height == 4)) in arithm_op, file /tmp/opencv-20180529-55469-97fkx6/opencv-3.4.1/modules/core/src/arithm.cpp, line 661

如何正确翻译这段代码?

最佳答案

仔细查看错误消息。您不仅需要 NumPy 数组的类型为 CV_64F 或 float ,高度还需要为 1 或 4。对于您的具体情况,这意味着您必须提供一个 2D NumPy 数组高度为 1。默认情况下,您创建的数组是 int32 类型,因此请确保将 dtype 指定为 np.float

最后,您可以向标量中引入一个单独的行,这将帮助您做到这一点:

output = cv2.absdiff(image, np.array([190, 119, 102], dtype=np.float)[None])

此代码 np.array([190, 119, 102], dtype=np.float)[None] 创建了一个普通的 NumPy 数组,但确保精度为 float ,我们引入了一个单一维度,因此这变成了 1 x 3 2D NumPy 数组,而不是 3, NumPy 数组。

作为最后一个想法,您也可以在 NumPy 数组构造函数中只提供一个二维列表而不是一维列表来获得相同的结果。这取决于您如何创建标量:

output = cv2.absdiff(image, np.array([[190, 119, 102]], dtype=np.float))

关于python - 从 C++ 到 Python 的 OpenCV absdiff 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com