1. 程式人生 > >【opencv】imread 賦值 深拷貝淺拷貝

【opencv】imread 賦值 深拷貝淺拷貝

 

 

import cv2
import copy
import os


def filter_srcimg(dstimg):
    ss=3
    srcimg=copy.deepcopy(dstimg)
    #aa=5
    imgw=srcimg.shape[0]
    imgh=srcimg.shape[1]
    border_mat=[[0]*imgw]*imgh
    for ddd in range(0,1):
        for i in range(20,imgw-20):
            for j in range(20,imgh-20):
                loss
=(8*float(srcimg[i][j][0])-float(srcimg[i-ss][j-ss][0])-float(srcimg[i-ss][j][0])-float(srcimg[i][j-ss][0])-float(srcimg[i-ss][j+ss][0])-float(srcimg[i+ss][j-ss][0])-float(srcimg[i][j+ss][0])-float(srcimg[i+ss][j][0])-float(srcimg[i+ss][j+ss][0]))/8 if loss>10 or srcimg[i][j][0]>180:
#print loss #print "####,",srcimg[i][j][0] border_mat[i][j]=1 #res=int((float(srcimg[i-aa][j-aa][0])+float(srcimg[i-aa][j][0])+float(srcimg[i][j-aa][0]))/3) res=int(float(srcimg[i][j][0])-loss*3) if res<0: res
=0 dstimg[i][j][0]=res dstimg[i][j][1]=dstimg[i][j][0] dstimg[i][j][2]=dstimg[i][j][0] #return dstimg if __name__=='__main__': for elem in os.listdir(os.getcwd()): if '.py' not in elem: img=cv2.imread(elem) cv2.imshow("1",img) cv2.waitKey(0) filter_srcimg(img) cv2.imshow("1",img) cv2.waitKey(0)

 

注意事項:

1、cv2.imread返回型別

img=cv2.imread("ddd.png")

返回一個(高度,寬度,通道數)的ndarray

返回的ndarray中的資料型別是numpy.uint8,即8位無符號整數(0-255)

修改畫素值:

img[0][0][0]=100

這裡注意,因為ndarray中的型別為uint8,故賦的值上溢位(>255)或下溢位(<0)時,會自動取模,而不會報錯!

 

2、深拷貝淺拷貝

 

(1)賦值時

對基本資料型別是值拷貝

 

 

 

對類是淺拷貝

 

 

 

 

如果對類進行值拷貝,需要使用深拷貝copy.deepcopy()

比較兩個引用是否指向同一物件——用id()檢視引用指向的地址,id()返回值為int

 

 

 

 

(2)函式傳參時

與賦值時相同

對基本資料型別是值拷貝

 

輸出是1 

 

對類是淺拷貝

  

輸出是[2,1,1]