0

我正在尝试使用 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结果不同。请帮我。

4

2 回答 2

0

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

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

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

于 2013-04-29T15:08:36.993 回答
0

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

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

于 2013-04-29T13:00:22.740 回答