python - 我正在尝试实现 soble 过滤器,但发生错误
问题描述
我正在尝试在图像上实现 sobel 过滤器,但 for 循环中出现了小错误,这表明您的矩阵大小不同。如何解决这个问题。我是python的初学者。
import cv2
import numpy as np
import matplotlib.pyplot as plt
import math as ma
img = cv2.imread('OD9.png')
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img1=img[125:134,125:134];
A=img1;
M,N=img1.shape
mag=np.zeros((M-2,N-2), dtype=int);
plt.imshow(img1,cmap='gray')
plt.show()
Gx =np.array([[-1, 0, 1], [-2, 0, 2],[ -1, 0, 1]])
Gy =np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
for i in range(1,M-1):
for j in range(1,N-1):
S1=sum(np.multiply(Gx,A[i:i+3,j:j+3]))
S1=sum(S1)
S2=sum(np.multiply(Gy,A[i:i+3,j:j+3]))
S2=sum(S2)
mag[i, j] = ma.sqrt(S1**2+S2**2)
正在显示的错误
Traceback (most recent call last):
File "<ipython-input-50-92ee883564ed>", line 1, in <module>
runfile('C:/Users/deo1/Desktop/Vijay-first-project/test_filter.py', wdir='C:/Users/deo1/Desktop/Vijay-first-project')
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/deo1/Desktop/Vijay-first-project/test_filter.py", line 22, in <module>
S1=sum(np.multiply(Gx,A[i:i+3,j:j+3]))
ValueError: operands could not be broadcast together with shapes (3,3) (3,2)
解决方案
推荐阅读
- javascript - 使用 React Native Alert 确认/阻止返回按钮导航
- python - 向循环函数添加分数
- php - 如何通过 PHP 自动更改 SQL 查询的 ID?
- javascript - 如何使用 Web-Worker 加速文件传输
- r - 编写一个函数来清理字符串数据并重命名列
- python - 我应该如何“保存整个 Game.py 中的所有控制台输出并将它们写入新的文本文件”?
- ios - Xcode 显示一些警告
- python - unicodedata 中的规范化是什么意思?
- javascript - 如何实现复杂的数组?
- thymeleaf - 为什么 html 元素中的 Html 文本不与 Thyme-leaf 文本连接?代码是