zoukankan      html  css  js  c++  java
  • 【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]

  • 相关阅读:
    fatal error LNK1123: failure during conversion to COFF: file invalid or corr
    BEGIN_SINK_MAP(CMainDlg) SINK_ENTRY(IDC_EXPLORER1, ..。响应不到的
    第三周项目3-程序的多文件组织
    第三周项目2-三角形类(二)
    第三周项目1-三角形类(一)
    第三周课后实践-阅读程序
    第二周项目4-图书馆的书
    第二周项目3-时间类
    第二周项目2-长方柱类
    第二周项目1-旱冰场造价
  • 原文地址:https://www.cnblogs.com/zealousness/p/10088393.html
Copyright © 2011-2022 走看看