【问题标题】:Convert Matlab to OpenCV in python在 python 中将 Matlab 转换为 OpenCV
【发布时间】:2015-07-28 13:06:24
【问题描述】:

我正在尝试使用 OpenCV 包将一段 Matlab 代码转换为 python。但我不知道如何在 Matlab 中实现 filter2。这是matlab代码。

imdist = imread("testimage1.bmp");
imdist = rgb2gray(imdist);
window = fspecial('gaussian',7,7/6);
window = window/sum(sum(window));
mu = filter2(window, imdist, 'same');

我的python代码在这里:

import pyopencv as cv
import numpy as np
img = cv.imread("testimage1.bmp")
imdist = cv.Mat()
cv.cvtColor(img, imdist, cv.CV_BGR2GRAY)
row = cv.getGaussianKernel(7, 7.0/6.0)
col = cv.getGaussianKernel(7, 7.0/6.0)
window = cv.asMat(np.dot(col[:], row[:].T))
window = cv.asMat(window[:]/sum(sum(window[:])))
mu = cv.Mat()
# I'm not sure it should be filter2D
cv.filter2D(imdist, mu, -1, window)

过滤器掩码“窗口”是相同的。但是变量“mu”与matlab结果不同。请帮我。

【问题讨论】:

    标签: python matlab opencv


    【解决方案1】:

    在我看来,您已经切换了锚点和内核参数。另外,不知道为什么你的锚是一维的。

    The documentation 表示语法是cv.Filter2D(src, dst, kernel, anchor=(-1, -1)),所以我认为你应该使用cv.filter2D(imdist, mu, window, (-1, -1))

    【讨论】:

    • 感谢您的帮助。但是这里的cv是pyopencv,文档是cv2。这里的语法是正确的。
    • 我明白了。作为参考,this 将成为相关文档。
    • 我使用了 API 所说的 filter2D。但是结果不是我想要的,就像上面的代码一样。
    • 我意识到,我只是为可能正在阅读本文的其他人提供链接。顺便说一句,您可以在问题中提到 pyopencv,这会有所帮助。
    【解决方案2】:

    如果你使用的是官方的Python绑定,可以直接调用GaussianBlur函数:

    dst = cv2.GaussianBlur(src, (7,7), 7.0/6.0)
    

    或将cv2.Smooth 函数与内部调用相同的CV_GAUSSIAN 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 2020-02-15
      • 1970-01-01
      • 2017-07-16
      • 2012-05-12
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      相关资源
      最近更新 更多