首页 > 解决方案 > 我正在尝试实现 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) 

标签: pythonloopsnested-loops

解决方案


推荐阅读