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()

           

    逻辑运算符(后续更新)

  • 相关阅读:
    [LeetCode] Two Sum
    INTERESTING AND OBSCURE INHERITANCE ISSUES WITH CPP
    Changing the Overridden Method’s Characteristics
    Cpp多重继承会产生的问题
    [LeetCode] Copy List with Random Pointer
    [LeetCode] Merge k Sorted Lists
    [LeetCode] Swap Nodes in Pairs
    [LeetCode] Add Two Numbers
    [LeetCode] Merge Two Sorted Lists
    [LeetCode] Climbing Stairs (Sequence DP)
  • 原文地址:https://www.cnblogs.com/blog-xyy/p/11184095.html
Copyright © 2011-2022 走看看