图像运算(一)【OpenCV&Python】

图像运算(一)

  • 1、加法运算
    • 1.1 加号运行算符
    • 1.2 cv2.add()函数
  • 2、图像加权和==cv2.addWeighted()==

本章主要介绍了加法运算、位运算,并使用它们实现了位平面分解、图像异或加密、数字水印、脸部打码/解码等实例。

1、加法运算

在图像处理过程中,经常需要对图像进行加法运算。实现加法运算主要有两种方式,一种通过**加法运算符“+”,另一种是通过cv2.add()函数**对图像进行加法运算。

1.1 加号运行算符

使用加号运算符时,遵循以下规则:
a + b = a + b , a + b ≤ 255 a+b= a+b,a+b≤255 a+b=a+ba+b255

a + b = m o d ( a + b , 256 ) , a + b ≤ 255 a+b= mod(a+b,256),a+b≤255 a+b=mod(a+b256),a+b255
式中,mod是取模运算,表示计算“a+b的和除以256取余数”

1.2 cv2.add()函数

使用函数时会得到像素值对应图像的饱和值,其语法格式为:
计算结果= cv2.add(像素值a,像素值b)
遵循以下规则:
a + b = a + b , a + b ≤ 255 a+b= a+b,a+b≤255 a+b=a+ba+b255

a + b = 255 , a + b ≤ 255 a+b= 255,a+b≤255 a+b=255a+b255
需要注意的是,函数cv2.add()中的参数可能有如下三种形式:
形式1:计算结果=cv2.add(图像1,图像2),两个参数都是图像,则图像的大小、类型必须**保持一致
形式2:计算结果=cv2.add(数值,图像),第一个参数是数值,第二个参数是图像,此时将超过图像饱和值的数值处理为
饱和值(最大值)
形式3:计算结果=cv2.add(图像,数值),第一个参数是图像,第二个参数是数值,此时将超过图像饱和度的数值处理为
饱和值(最大值)**。

2、图像加权和cv2.addWeighted()

所谓图像加权和,就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为:
dst=saturate(src1a+scr2b+c)
式中,saturate表示取饱和值(最大值)。
函数cv2.addWeighted(),用来实现图像的加权和(混合、融合),该函数的语法格式为:

dst = cv2.addWeighted(src1,alpha,src,beta,gamma)
# 结果图像=图像1*系数1+图像2*系数2+亮度调节量

alpha、beta是src1、src2的系数,它们的和可以是1,也可以不是1,gamma可以是0,但是是必选参数,不能省略。
例1:使用函数cv2.addWeighted()对两幅图像进行加权混合。

import cv2
a = cv2.imread("C:\\Users\\Kris\\Desktop\\lake.tif")
b = cv2.imread("C:\\Users\\Kris\\Desktop\\house.tif")
result = cv2.addWeighted(a,0.6,b,0.4,0)
cv2.imshow("lake",a)
cv2.imshow("house",b)
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyWindows()

图像运算(一)【OpenCV&Python】_第1张图片
图像运算(一)【OpenCV&Python】_第2张图片图像运算(一)【OpenCV&Python】_第3张图片
例2:使用cv2.addWeighted()将一幅图像的ROI混合在另外一幅图像内。

import cv2
lake = cv2.imread("C:\\Users\\Kris\\Desktop\\lake.tif",cv2.IMREAD_UNCHANGED)
house = cv2.imread("C:\\Users\\Kris\\Desktop\\house.tif",cv2.IMREAD_UNCHANGED)
cv2.imshow("lake",lake)
cv2.imshow("house",house)
face1 = lake[160:256,200:256]
face2 = house[160:256,200:256]
add = cv2.addWeighted(face1,0.6,face2,0.4,0)
house[160:256,200:256] = add
cv2.imshow("result",house)
cv2.waitKey()
cv2.destroyWindows()

结果如下图所示:
图像运算(一)【OpenCV&Python】_第4张图片

你可能感兴趣的:(opencv,python)