我不知道如何解决 OpenCV Python 问题
I don't know how can I solve OpenCV Python problem
原来的作业是
Use np.array() to generate the following 8-bit image and obtain the result of applying the following mask:
However, the edges are padded to zero. (cv2.BORDER_CONSTANT)
[[10, 20, 40, 50]
[50, 20, 50, 20]
[10, 10, 30, 60]
[20, 40, 60, 70]]
(a) 3x3 average filter
(b) 3x3 gaussian filter, sigmaX=0
(c) If the results of (a) and (b) are M(x,y) and G(x,y),
respectively, calculate M(0,0) and G(0,0) and show that
they are consistent with the results of (a) and (b).
问题是,
(a) - 3x3 平均滤波器
(b) - 3x3 高斯滤波器,sigmaX=0
而(a)的结果是M(x,y),(b)的结果是G(x,y)
所以我应该证明 M(0, 0) 和 G(0, 0) 是正确的。
我写了代码,还是解决不了这个问题
我该如何解决这个问题....
代码-
import cv2
import numpy as np
src = np.array([[10, 20, 40, 50],
[50, 20, 50, 20],
[10, 10, 30, 60],
[20, 40, 60, 70]], dtype=np.uint8)
dst1 = cv2.blur(src, ksize=(3, 3), borderType=cv2.BORDER_CONSTANT)
dst2 = cv2.GaussianBlur(src, ksize=(3, 3), sigmaX=0, borderType=cv2.BORDER_CONSTANT)
print(dst1)
print(dst1[0][0])
print(dst2)
print(dst2[0][0])
print(dst1[0][0] == dst2[0][0])
结果-
M(0, 0) 为 11(dst1[0][0]) G(0, 0) 为 13(dst2[0][0])
我的意思是,我需要使 dst1[0][0] 和 dst2[0][0] 匹配。
但结果不匹配
抱歉我的英语不好.....
这是一个作业,所以我不会为你完全解决它,但这里有一些提示:
因此,卷积是滤波器内核与相同大小的像素邻域之间 per-element 乘积的总和。
at 0,0 - 给定零填充,后者看起来像这样:
0.0 0.0 0.0
0.0 10.0 20.0
0.0 50.0 20.0
一个 3x3 的盒子内核看起来像这样:
1.0/9 1.0/9 1.0/9
1.0/9 1.0/9 1.0/9
1.0/9 1.0/9 1.0/9
所以,M(0,0) 是:
1.0/9 * 0.0 + 1.0/9 * 0.0 + 1.0/9 * 0.0 +
1.0/9 * 0.0 + 1.0/9 * 10.0 + 1.0/9 * 20.0 +
1.0/9 * 0.0 + 1.0/9 * 50.0 + 1.0/9 * 20.0 == 11.11111
你必须证明 M(0,0) == dst1[0,0]
此处使用浮点值以避免舍入问题。请在您的 opencv 代码中使用 np.float32
,而不是 np.uint8
来实现相同的目的。
这是高斯内核,希望你知道,现在该做什么,祝你好运;)
原来的作业是
Use np.array() to generate the following 8-bit image and obtain the result of applying the following mask:
However, the edges are padded to zero. (cv2.BORDER_CONSTANT)
[[10, 20, 40, 50]
[50, 20, 50, 20]
[10, 10, 30, 60]
[20, 40, 60, 70]]
(a) 3x3 average filter
(b) 3x3 gaussian filter, sigmaX=0
(c) If the results of (a) and (b) are M(x,y) and G(x,y),
respectively, calculate M(0,0) and G(0,0) and show that
they are consistent with the results of (a) and (b).
问题是,
(a) - 3x3 平均滤波器
(b) - 3x3 高斯滤波器,sigmaX=0
而(a)的结果是M(x,y),(b)的结果是G(x,y)
所以我应该证明 M(0, 0) 和 G(0, 0) 是正确的。
我写了代码,还是解决不了这个问题
我该如何解决这个问题....
代码-
import cv2
import numpy as np
src = np.array([[10, 20, 40, 50],
[50, 20, 50, 20],
[10, 10, 30, 60],
[20, 40, 60, 70]], dtype=np.uint8)
dst1 = cv2.blur(src, ksize=(3, 3), borderType=cv2.BORDER_CONSTANT)
dst2 = cv2.GaussianBlur(src, ksize=(3, 3), sigmaX=0, borderType=cv2.BORDER_CONSTANT)
print(dst1)
print(dst1[0][0])
print(dst2)
print(dst2[0][0])
print(dst1[0][0] == dst2[0][0])
结果-
M(0, 0) 为 11(dst1[0][0]) G(0, 0) 为 13(dst2[0][0])
我的意思是,我需要使 dst1[0][0] 和 dst2[0][0] 匹配。
但结果不匹配
抱歉我的英语不好.....
这是一个作业,所以我不会为你完全解决它,但这里有一些提示:
因此,卷积是滤波器内核与相同大小的像素邻域之间 per-element 乘积的总和。
at 0,0 - 给定零填充,后者看起来像这样:
0.0 0.0 0.0
0.0 10.0 20.0
0.0 50.0 20.0
一个 3x3 的盒子内核看起来像这样:
1.0/9 1.0/9 1.0/9
1.0/9 1.0/9 1.0/9
1.0/9 1.0/9 1.0/9
所以,M(0,0) 是:
1.0/9 * 0.0 + 1.0/9 * 0.0 + 1.0/9 * 0.0 +
1.0/9 * 0.0 + 1.0/9 * 10.0 + 1.0/9 * 20.0 +
1.0/9 * 0.0 + 1.0/9 * 50.0 + 1.0/9 * 20.0 == 11.11111
你必须证明 M(0,0) == dst1[0,0]
此处使用浮点值以避免舍入问题。请在您的 opencv 代码中使用 np.float32
,而不是 np.uint8
来实现相同的目的。
这是高斯内核,希望你知道,现在该做什么,祝你好运;)