zoukankan      html  css  js  c++  java
  • OpenCV---像素运算

    像素运算

    分为算术运算逻辑运算

    算术运算:

    加减乘除

    调节亮度
    调整对比度

    逻辑运算:

    与或非

    遮罩层控制

    一:算术运算

    import cv2 as cv
    import numpy as np
    
    def add_demo(m1,m2):
        dst = cv.add(m1,m2)
        cv.imshow("add_demo",dst)
    
    def subtract_demo(m1,m2):
        dst = cv.subtract(m1,m2)
        cv.imshow("subtract_demo",dst)
    
    def multiply_demo(m1,m2):
        dst = cv.multiply(m1,m2)
        cv.imshow("multiply_demo",dst)
    
    def divide_demo(m1,m2):
        dst = cv.divide(m1,m2)  #不多用
        cv.imshow("divide_demo",dst)
    
    src1 = cv.imread("./a1.jpg")  #读取图片
    src2 = cv.imread("./a2.jpg")  #读取图片
    print(src1.shape)
    print(src2.shape)
    cv.imshow("image1",src1)
    cv.imshow("image2",src2)
    add_demo(src1,src2)
    subtract_demo(src1,src2)
    multiply_demo(src1,src2)
    divide_demo(src1,src2)
    cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
    cv.destroyAllWindows()  #销毁所有窗口

    原图:

    add:(黑色是0,白色为255,当大于255会为白色,小于0为黑色

    subtract:

    multiply:

    divide:

    获得各个通道的均值:

    def others(m1,m2):
        M1 = cv.mean(m1)
        M2 = cv.mean(m2)
        print(M1)
        print(M2)
    (190.8543375, 190.8543375, 190.8543375, 0.0)  #整体偏黑
    (186.68600625000002, 228.5496625, 241.74333125, 0.0)  #红绿较多,所以偏黄

    获取各个图像的方差:

    def others(m1,m2):
        M1 = cv.mean(m1)
        M2 = cv.mean(m2)
        M1,dev1 = cv.meanStdDev(m1)  #返回均值和方差,分别对应3个通道
        M2,dev2 = cv.meanStdDev(m2)
        print(M1)
        print(dev1)
        print(M2)    
        print(dev2)
    [[190.8543375]  #M1
     [190.8543375]
     [190.8543375]]
    [[95.31664687]  #dev1
     [95.31664687]
     [95.31664687]]

    [[186.68600625]  #M2
     [228.5496625 ]
     [241.74333125]]
    [[72.40766216]  #dev2
     [39.39460523]
     [30.92104465]]

    可以知道dev2偏小,所以图二中色彩差异(对比性)是较小的,若是整张图片同色,则方差为0,均值为0,可以用来查看扫描仪中是否有信息(方差小于一个预值,则失效,丢弃)

        img = np.zeros([400,400,3],np.uint8)
        m,dev = cv.meanStdDev(img)
        print(m,dev)

    二:逻辑运算

    与and:(1和1为1)(类似遮罩,当我们使用白色遮罩)

    def logic_and_demo(m1,m2):
        dst = cv.bitwise_and(m1,m2)
        cv.imshow("logic_and_demo",dst)

    或or:(1和1,1和0都为1)

    def logic_or_demo(m1,m2):
        dst = cv.bitwise_or(m1,m2)
        cv.imshow("logic_or_demo",dst)

    异或xor:(1和0为1)

    def logic_xor_demo(m1,m2):  #异或:不同为1,相同为0
        dst = cv.bitwise_xor(m1,m2)
        cv.imshow("logic_or_demo",dst)

     

    非(not):对一张图片取反

    def logic_not_demo(m1):  #非是对于一张图片
        dst = cv.bitwise_not(m1)
        cv.imshow("logic_not_demo",dst)

    补充:针对视频中inrange

    def extrace_object():
        capture = cv.VideoCapture("./1.mp4")
        while True:
            ret,frame = capture.read()  #frame是每一帧图像,ret是返回值,为0是表示图像读取完毕
            if ret == False:
                break
            hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
            lower_hsv = np.array([0,43,46])
            upper_hsv = np.array([10,255,255])
            mask = cv.inRange(hsv,lower_hsv,upper_hsv)
            dst = cv.bitwise_and(frame,frame,mask=mask)
            cv.imshow("video",frame)
            cv.imshow("mask", mask)
            cv.imshow("dst",dst)
            c = cv.waitKey(40)
            if c == 27:
                break

    mask:该函数输出的dst是一幅二值化之后的图像(是将满足我们的图像对象所有位都设为1白色,不满足设置为0黑色)

    bitwise_and:白色全为1与原图相与,会将白色区域提取

    调整亮度和对比度addWeighted

    推文:Opencv 例程讲解 6 ---- 图片融合 addWeighted到底有多快?

    def contrast_brightness_demo(image,c,b):
        '''
        :param image:   原图
        :param c:   对比度 是将像素乘与c,原来2,4---->4, 8  差距由2--->4导致对比增强
        :param b:   亮度  是将每个像素点加上相关亮度
        :return:
        '''
        h,w,ch = image.shape
        blank = np.zeros([h,w,ch],image.dtype)
        dst = cv.addWeighted(image,c,blank,1-c,b)
        cv.imshow("dst",dst)
    src = cv.imread("./1.png")
    cv.imshow("src",src)
    contrast_brightness_demo(src,1.2,0)

    亮度:

    src = cv.imread("./1.png")
    cv.imshow("src",src)
    contrast_brightness_demo(src,1,50)

    1、第1个参数,输入图片1, 
    2、第2个参数,图片1的融合比例
    3、第3个参数,输入图片2
    4、第4个参数,图片2的融合比例
    5、第5个参数,偏差
    6、第6个参数,输出图片
  • 相关阅读:
    io学习
    asp.net文件上传进度条研究
    asp.net页面中的Console.WriteLine结果如何查看
    谨慎跟随初始目的不被关联问题带偏
    android 按钮特效 波纹 Android button effects ripple
    安卓工作室 日志设置
    安卓工作室 文件浏览器 android studio File browser
    一个新的Android Studio 2.3.3可以在稳定的频道中使用。A new Android Studio 2.3.3 is available in the stable channel.
    新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
    码云,git使用 教程-便签
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9260798.html
Copyright © 2011-2022 走看看