您的位置:首页 > 编程语言 > Python开发

python OpenCV学习笔记(七):图片的算术运算

2018-01-29 15:02 746 查看
官方文档 – https://docs.opencv.org/3.4.0/d0/d86/tutorial_py_image_arithmetics.html

图片加法

图片加法可以用OpenCV的方法
cv.add()
,也可以用numpy的操作
res=img1+img2
。两个图像都应该具有相同的深度和类型,或者第二个图像可以是一个标量值。

OpenCV添加和Numpy添加有区别。OpenCV添加是一个饱和操作,而Numpy加法是一个模块化操作。

x = np.uint8([250])
y = np.uint8([10])

# OpenCV的方法
cv.add(x, y)  # 250+10=260 => 255
# [[255]]

# numpy的方法
x + y  # 250+10=260 % 256 = 4
# [4]


推荐使用OpenCV的方法

图片融合

使用
cv.addWeighted()
方法,设置两张图片权重,融合两张图片。两张图片必须尺寸大小一致

img1 = cv.imread('test1.jpg')
img2 = cv.imread('test2.jpg')

dst = cv.addWeighted(img1, 0.7, img2, 0.3, 0)

cv.imshow('dst', dst)
cv.waitKey(0)
cv.destroyAllWindows()


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


公式方程可以等价于
dst = src1*alpha + src2*beta + gamma


按位操作

包括 和、或、非、异或运算。在提取图像的任何部分时,定义和处理非矩形的ROI等,都将非常有用。

添加一个不规则图片到另一张图片上,只添加所需部分,其余部分透明。

import numpy as np
import cv2 as cv

# 加载图片
img1 = cv.imread('test1.jpg')
img2 = cv.imread('test2.jpg')

# 想把图片放到左上角,所以创建一个ROI
rows, cols, channels = img2.shape
roi = img1[0:rows, 0:cols]

# 创建一个logo遮罩,和其反转遮罩
img2gray = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)
mask_inv = cv.bitwise_not(mask)

# 标记处标识区域
img1_bg = cv.bitwise_and(roi, roi, mask=mask_inv)

# 只从标志图像中选择区域标识。
img2_fg = cv.bitwise_and(img2, img2, mask=mask)

# 把标识放在ROI中,并修改主图片
dst = cv.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst

cv.imshow('res', img1)
cv.waitKey(0)
cv.destroyAllWindows()


cv.threshold(src, thresh, maxval, type[, dst])


thresh:阈值

maxval:对高于或者低于阈值的像素值做处理后重新赋予的像素值(取决于type类型)

type:处理像素值的方法,有以下类型:

cv.THRESH_BINARY:
dst(x,y)=maxval if src(x,y)>thresh else 0


cv.THRESH_BINARY_INV:
dst(x,y)=0 if src(x,y)>thresh else maxval


cv.THRESH_TRUNC:
dst(x,y)=thresh if src(x,y)>thresh else src(x,y)


cv.THRESH_TOZERO:
dst(x,y)=src(x,y) if src(x,y)>thresh else 0


cv.THRESH_TOZERO_INV:
dst(x,y)=0 if src(x,y)>thresh else src(x,y)


扩展:: python OpenCV学习笔记(十):图片阈值

图像按位操作方法

cv.bitwise_and


cv.bitwise_or


cv.bitwise_not


cv.bitwise_xor
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OpenCV