python OpenCV学习笔记(七):图片的算术运算
2018-01-29 15:02
746 查看
官方文档 – https://docs.opencv.org/3.4.0/d0/d86/tutorial_py_image_arithmetics.html
OpenCV添加和Numpy添加有区别。OpenCV添加是一个饱和操作,而Numpy加法是一个模块化操作。
推荐使用OpenCV的方法
公式方程可以等价于
添加一个不规则图片到另一张图片上,只添加所需部分,其余部分透明。
thresh:阈值
maxval:对高于或者低于阈值的像素值做处理后重新赋予的像素值(取决于type类型)
type:处理像素值的方法,有以下类型:
cv.THRESH_BINARY:
cv.THRESH_BINARY_INV:
cv.THRESH_TRUNC:
cv.THRESH_TOZERO:
cv.THRESH_TOZERO_INV:
扩展:: python OpenCV学习笔记(十):图片阈值
图像按位操作方法
图片加法
图片加法可以用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
相关文章推荐
- python OpenCV学习笔记(十三):图片梯度
- opencv-python 学习笔记1:简单的图片处理
- opencv-python 学习笔记1:简单的图片处理
- python OpenCV学习笔记(九):图片的几何变形
- opencv-python 学习笔记1:简单的图片处理
- openCV Python学习笔记(一)图片的读入,显示与保存
- Python OpenCV学习笔记之:通过图像金字塔方式缩小放大图片
- python opencv入门(学习笔记no.1)-图片的读入读出
- python OpenCV学习笔记(六):图片的基本操作
- opencv python学习笔记(五)图像的算术与
- opencv-python 学习笔记1:简单的图片处理
- python OpenCV学习笔记(十):图片阈值
- OpenCV学习笔记7-图像算术运算
- Opencv学习笔记三-直方图点运算(直方图基本点算子、直方图正规化、直方图均衡化)
- Opencv Python版学习笔记(七)k均值-k-means
- OpenCV 2 学习笔记(16): 利用查找表(Look-up table)改善图片质量,增加图像对比度
- OpenCV学习笔记(五十七)——在同一窗口显示多幅图片
- opencv学习笔记(1)--图片加载
- 【OpenCV学习笔记】【编程实例】一(VS2010/MFC+OPenCV2.4.7读取图片和摄像头)
- Opencv Python版学习笔记(一)图像直方图