Matlab在OpenCV中的Conv2等效物
Matlab's Conv2 equivalent in OpenCV
我一直在尝试使用OpenCV做二维矩阵的卷积。我实际上检查了这段代码http://blog.timmlinder.com/2011/07/opencv-equivalent-to-matlabs-conv2-function/#respond但它只在正的情况下才会得到正确的答案。是否有一个简单的函数,如conv2在Matlab的OpenCV或c++ ?
下面是一个例子:
A= [
1 -2
3 4
]
我想让它与[-0.707 0.707]
进行卷积通过Matlab的conv2得到的结果是
-0.7071 2.1213 -1.4142
-2.1213 -0.7071 2.8284
在OpenCV或c++中计算输出的一些函数?
如果您想要独占的OpenCV解决方案,请使用cv2。filter2D 函数。但是,如果您想获得与matlab相同的正确输出,则应该调整borderType标志。
>>> A = np.array([ [1,-2],[3,4] ]).astype('float32')
>>> A
array([[ 1., -2.],
[ 3., 4.]], dtype=float32)
>>> B = np.array([[ 0.707,-0.707]])
>>> B
array([[ 0.707, -0.707]])
>>> cv2.filter2D(A2,-1,B,borderType = cv2.BORDER_CONSTANT)
array([[-0.70700002, 2.12100005, -1.41400003],
[-2.12100005, -0.70700002, 2.82800007]], dtype=float32)
borderType很重要。要找到卷积,你需要数组外的值。如果您想获得类似matlab的输出,则需要传递cv2.BORDER_CONSTANT。
如果你正在使用OpenCV与Python 2绑定,你可以使用Scipy,只要你的图像将是ndarray:
>>> from scipy import signal
>>> A = np.array([[1,-2], [3,4]])
>>> B = np.array([[-0.707, 0.707]])
>>> signal.convolve2d(A,B)
array([[-0.707, 2.121, -1.414],
[-2.121, -0.707, 2.828]])
如果您想获得与matlab相同的结果,请确保使用完整模式(默认设置),只要您使用'相同'模式Scipy将与matlab的中心不同。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 将值指定给向量(2D)的向量中的某个位置
- Matlab在OpenCV中的Conv2等效物