zoukankan      html  css  js  c++  java
  • opencv-python-学习笔记六(图像的基本运算)

    算术运算符

    概述

    我们可以通过OpenCV函数(cv.add())或简单的numpy操作(res = img1 + img2)对两个图像运算。两个图像的 depth(存储每幅图像所用到的位数,图像深度确定彩色图像的每个像素可能有的颜色数) and type应该相同,或者第二个图像可以只是一个标量值。

    但OpenCV加法和Numpy加法是有区别的。OpenCV加法是饱和运算,Numpy加法是模运算。

    举个例子:

    import cv2 as cv
    import numpy as np
    
    
    x = np.uint8([250])  #无符号8位整型,表示范围是[0, 255]的整数
    y = np.uint8([10])
    print(cv.add(x, y))  # 250+10 = 260 => [[255]]
    
    print(x+y)          # 250+10 = 260 % 256 = 4  =>[4]

    图像算术运算

    参数含义:

    src1:第一张图像

    src2:第二张图像

    dst:destination,目标图像,需要提前分配空间,可省略

    mask:8位单通道数组,指定要更改的输出数组的元素。

    scale:缩放比

    dtype:输出数组的深度,默认等于-1

    dst=cv.add(src1, src2[, dst[, mask[, dtype]]])

    dst=cv2.subtract(src1,src2,dst,mask,dtype)

    dst=cv2.multiply(src1,src2,dst,scale,dtype)       dst = scale * src1 * src2

    dst=cv2.divide(src1,src2,dst,scale,dtype)          dst = scale * src1 / src2

    举例:

    import cv2 as cv
    import numpy as np
    
    
    img1 = cv.imread('1.jpg')  # 图片1
    img2 = cv.imread('2.jpg')  # 图片2
    
    add = cv.add(img1, img2)  # 两个图像相加
    subtract = cv.subtract(img1, img2)  # 两个图像相减
    multiply = cv.multiply(img1, img2)  # 两个图像相乘
    divide = cv.divide(img1, img2)  # 两个图像相除
    
    cv.imshow("test", add)

    图像混合

    这也是图像的添加,但是给图像不同的权重,因此它给人一种混合或透明的感觉。图像按下式添加:

    dst=αimg1+βimg2+γ

    dst=cv.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

    参数:

    src1:第一幅图像

    appha:第一个数组元素所占权重

    src2:第二幅图像

    beta:第二个数组元素所占权重

    gamma:标量加到每个和上

    dst:与输入数组具有相同大小和通道数的output数组

    dtype:

    import numpy as np
    import cv2 as cv
    
    
    def nothing(x):
        pass
    
    
    # Create a black image, a window
    img1 = np.zeros((300, 528, 3), np.uint8)
    img2 = cv.imread("2.jpg")
    
    cv.namedWindow('image')
    # create trackbars for color change
    cv.createTrackbar('change', 'image', 0, 1, nothing)
    while(1):
        k = cv.waitKey(1) & 0xFF
        if k == 27:
            break
        # get current positions of four trackbars
        change = cv.getTrackbarPos("change", 'image')
        dst = cv.addWeighted(img1, change, img2, 1-change, 0)
        cv.imshow("image", dst)
    cv.destroyAllWindows()

           

    逻辑运算符(后续更新)

  • 相关阅读:
    金蝶数据库执行语句
    金蝶 更新价格分录表触发器
    金蝶触发器,生成条码信息
    SQL从中文中获取拼音首字母
    C语言 typedef用法
    这姑娘漂亮不,说实话,有糖吃
    条码开发的意义在哪里
    ERP开发,重点不在功能
    金蝶出入库数据库表里加字段后出现的问题解决
    解决金蝶未检测到K/3许可文件,并且该账套已超过演示版期限问题
  • 原文地址:https://www.cnblogs.com/blog-xyy/p/11184095.html
Copyright © 2011-2022 走看看