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

       

逻辑运算符(后续更新)

原文地址:https://www.cnblogs.com/blog-xyy/p/11184095.html