Open CV卷积核外圈元素不存在,代码运行不起来。怎么加判断语句,让代码运行起来。

原题目给出是这个样子,

img


需要把图像像素值变换类似于卷积一样的。使原图像尺寸变小,只是计算步骤有点复杂。现在写的代码运行不了。
这是我写的代码和运行的结果。
import cv2
import numpy as np
image=cv2.imread("kate_gray.png")

for i in range(image.shape[0]):

  if (image[i - 513] )or image[i - 513] <= image[i]:a = 0
  else:  a = 1
    



 if (image[i - 512])or image[i - 512] <= image[i]:
            b = 0
      else:
            b = 1
    if image[i - 511] <= image[i]:
            c = 0
    else:
            c = 1
    if image[i - 1] <= image[i]:
            d = 0
    else:
            d = 1
    if image[i + 1] <= image[i]:
            e = 0
    else:
            e = 1
    if image[i + 511] <= image[i]:
            f = 0
    else:
            f = 1
    if image[i +512] <= image[i]:
            g = 0
    else:
            g = 1
    if image[i + 513] <= image[i]:
            h = 0
    else:
            h = 1
else:a
    threshold=np.array([[a,b,c],[d,0,e],[f,g,h]])
    kernel=np.array([[1,2,4],[128,0,8],[64,32,16]])
    result=np.dot(threshold,kernel)

    print(array_sum(result))

for i in range(image.):import cv2

import numpy as np
image=cv2.imread("kate_gray.png")

for i in range(image.shape[0]):

  if (image[i - 513] )or image[i - 513] <= image[i]:a = 0
  else:  a = 1
    



 if (image[i - 512])or image[i - 512] <= image[i]:
            b = 0
      else:
            b = 1
    if image[i - 511] <= image[i]:
            c = 0
    else:
            c = 1
    if image[i - 1] <= image[i]:
            d = 0
    else:
            d = 1
    if image[i + 1] <= image[i]:
            e = 0
    else:
            e = 1
    if image[i + 511] <= image[i]:
            f = 0
    else:
            f = 1
    if image[i +512] <= image[i]:
            g = 0
    else:
            g = 1
    if image[i + 513] <= image[i]:
            h = 0
    else:
            h = 1
else:a
    threshold=np.array([[a,b,c],[d,0,e],[f,g,h]])
    kernel=np.array([[1,2,4],[128,0,8],[64,32,16]])
    result=np.dot(threshold,kernel)

    print(array_sum(result))

for i in range(image.):import cv2

import numpy as np
image=cv2.imread("kate_gray.png")

for i in range(image.shape[0]):

  if (image[i - 513] )or image[i - 513] <= image[i]:a = 0
  else:  a = 1
    



 if (image[i - 512])or image[i - 512] <= image[i]:
            b = 0
      else:
            b = 1
    if image[i - 511] <= image[i]:
            c = 0
    else:
            c = 1
    if image[i - 1] <= image[i]:
            d = 0
    else:
            d = 1
    if image[i + 1] <= image[i]:
            e = 0
    else:
            e = 1
    if image[i + 511] <= image[i]:
            f = 0
    else:
            f = 1
    if image[i +512] <= image[i]:
            g = 0
    else:
            g = 1
    if image[i + 513] <= image[i]:
            h = 0
    else:
            h = 1
else:a
    threshold=np.array([[a,b,c],[d,0,e],[f,g,h]])
    kernel=np.array([[1,2,4],[128,0,8],[64,32,16]])
    result=np.dot(threshold,kernel)

    print(array_sum(result))

for i in range(image.):

img

你这段代码下的缩进有问题,包含的子代码是不是没有包含进去,你好好看下


 if (image[i - 512])or image[i - 512] <= image[i]:

可以参考这篇文章
python中indentationerror_Python中出现IndentationError错误的解决方法_陆拾贰號的博客-CSDN博客

你应该用cv2.copyMakeBorder(),先将你的图片padding一圈。
然后用cv2.filter2D()来卷积,对卷积结果进行下面的判断就是了。
这两个函数作用和参数控制百度下就有