1
我試圖檢測圖像的邊緣。爲此,我寫了下面的代碼:像素值被不加修改地改變在OpenCV中蟒
import numpy as np
import cv2
import math
img = cv2.imread('download.jpg',0)
img1 = img
k = img.shape
i=1
x=k[0]
y=k[1]
print x,y
while(i<(x-2)):
j=1
while(j<(y-2)):
a = (int(img[i,j+1])-int(img[i,j]))
b = (int(img[i+1,j])-int(img[i,j]))
c = (a**2) + (b**2)
img1[i,j] = math.sqrt(c)
#img1[i,j] = a
j+=1
i+=1
i=1
print "img"
print img
print "img1"
print img1
print i,j
cv2.imshow("image1",img1)
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
沒有在代碼中img被修改。然而,在代碼的最後,img的像素值被改變了(與img1相同)。任何人都可以解釋我什麼Iam失蹤?
執行深層副本..即IMG1 = img.clone();而不是分配。 – ssh99
不是問題的關鍵,但你的「邊緣檢測」簡直是梯度幅度。你可以使用numpy來更快地計算出來:'dy,dx = np.gradient(img);幅度= np.sqrt(dy ** 2 + dx ** 2))'。 –