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]

  • 相关阅读:
    grid与oracle用户下oracle程序权限不一致导致无法连接ASM问题
    错误ORA-29760: instance_number parameter not specified的解决办法
    window phone webclient xml 乱码解决方法
    谈谈layout-weight
    状态栏更改颜色
    android 顶部导航栏
    android 布局抽取优化
    Kotlin版HelloWorld
    浅谈synchronized作用
    android获取Tomcat的JSON数据
  • 原文地址:https://www.cnblogs.com/zealousness/p/10088393.html
Copyright © 2011-2022 走看看