【问题标题】:Edge Detection Python边缘检测 Python
【发布时间】:2021-03-01 01:27:42
【问题描述】:

我正在尝试获取图像的梯度,并期望相邻像素值之间的差异很大。更改我的像素值。顺便说一句,我不想​​使用任何 opencv 函数。这是我正在尝试工作的代码,但代码的结果保持在其初始状态。

import cv2
import numpy as np

img = cv2.imread('coins.jpg',0)
rows,cols = img.shape
for i in range(rows):
    for j in range(cols):
        if(((i+1) <= rows) and ((j+1) <= cols) and ((i-1) >= rows) and ((j-1) >= cols)):
            value = img[i,j]
            value1 = img[i+1,j]
            value2 = img[i-1,j]
            value3 = img[i,j+1]
            value4 = img[i,j-1]
            value5 = img[i+1,j+1]
            value6 = img[i+1,j-1]
            value7 = img[i-1,j-1]
            value8 = img[i-1,j+1]
            if(abs(value - value1) >= 10):
                value = 255
            if(abs(value - value2) >= 10):
                value = 255
            if(abs(value - value3) >= 10):
                value = 255
            if(abs(value - value4) >= 10):
                value = 255
            if(abs(value - value5) >= 10):
                value = 255
            if(abs(value - value6) >= 10):
                value = 255
            if(abs(value - value7) >= 10):
                value = 255
            if(abs(value - value8) >= 10):
                value = 255
cv2.imshow('Difference Im', img)
cv2.waitKey(0)

【问题讨论】:

    标签: python image numpy opencv image-processing


    【解决方案1】:

    你的情况:

    if(((i+1) <= rows) and ((j+1) <= cols) and ((i-1) >= rows) and ((j-1) >= cols)):
    

    永远不可能为真,因为 i 介于 0 和 rows-1 之间(即 i-1 永远不会 >=rows),而 j 介于 0 和 j-1 之间(因此 j-1 永远不会 >=cols),所以它控制的处理永远不会发生。

    另外,这个条件没有多大意义——你想要的是 i 在 1 和 rows-2 之间,j 在 1 和 cols-2 之间,所以正确的条件是(同时删除所有那些 c-样式(),因为这些都是and-ed在一起的):

    if i>=1 and i<=rows-2 and j>=1 and j<=cols-2:
    

    这应该可行。

    我现在无法对此进行测试,但您可以将其写得更简洁,例如:

     if 1<=i<=rows-2 and 1<=j<=cols-2:
    

    你可以让 for 语句使用范围 1,rows-1 和 1,cols-1 更好,然后你根本不需要 if 语句:-)

    您只需在if 语句下方添加print 语句即可自行诊断,然后您会看到这些语句永远不会执行,这就是您的图像永远不会改变的原因。

    此外,您应该将您的幻数 10 设为您初始化一次的变量,因此如果您需要更改阈值,您只需要编辑那个初始化而不是 8 次比较。

    并且应该可以在几个嵌套循环中进行阈值比较,这样您就不会有所有重复的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      相关资源
      最近更新 更多