在opencv python中无需修改即可更改图像的像素值

时间:2015-05-20 02:48:18

标签: python image opencv numpy

我试图检测图像的边缘。为此,我写了以下代码:

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相同)。谁能解释一下我失踪了什么?

1 个答案:

答案 0 :(得分:1)

原因是,Python中的赋值语句不复制对象, 完成img1 = img后,imgimg1仍然指向同一个Image对象时,如果需要独立改变对象,则需要制作副本

您也可以简单地实例化两个Image对象

img = cv2.imread('download.jpg', 0)
img1 = cv2.imread('download.jpg', 0)

否则你需要复制python对象img,例如使用https://docs.python.org/2/library/copy.html