OpenCV absdiff 相当于从 c++ 到 Python
OpenCV absdiff equivalent from c++ to Python
这是C++的一个示例:
cv::absdiff(input,cv::Scalar(target),output);
target
在哪里cv::Vec3b [190, 119, 102]
我在Python中尝试了以下内容:
output = cv2.absdiff(image, np.array([190, 119, 102]) )
这失败了:
错误:断言失败(类型 2 == 6 && (sz2.height == 1 || sz2.height == 4(( 在arithm_op中,文件/tmp/opencv-20180529-55469-97fkx6/opencv-3.4.1/modules/core/src/arithm.cpp, 661路
如何正确翻译此代码?
非常仔细地查看错误消息。 您不仅需要 NumPy 数组的类型为CV_64F
或浮点,高度还需要为 1 或 4。 对于您的特定情况,这意味着您必须提供高度为 1 的 2D NumPy 数组。 默认情况下,您创建的数组类型为int32
,因此请确保指定要np.float
dtype
。
最后,您可以在标量中引入一个单一实例行,这将有助于您执行此操作:
output = cv2.absdiff(image, np.array([190, 119, 102], dtype=np.float)[None])
此代码np.array([190, 119, 102], dtype=np.float)[None]
创建一个普通的 NumPy 数组,但确保精度是浮点数,并且我们引入了一个单例维度,因此它成为一个1 x 3
的 2D NumPy 数组,而不是一个3,
NumPy 数组。
作为最后一个想法,您也可以在 NumPy 数组构造函数中只提供一个 2D 列表而不是一个 1D 列表来实现相同的结果。这取决于您创建标量的方式:
output = cv2.absdiff(image, np.array([[190, 119, 102]], dtype=np.float))
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- Python ctype 'c_char_p' Memory Leak