网站菜单

OpenCV学习笔记(2)——图像运算

一:图像基本运算

1.图像加法(参与运算的图像大小,类型必须一致)

Numpy

result = img1 + img2

OpenCV

result = cv2.add(img1, img2)

2.图像融合

将2张或以上的图像信息融合到1张图像上。融合的图像有更多信心,方便进行处理。例如消除照片中的不清晰部分。

#结果图像 = cv2.addWeighted(图像1, 系数1, 图像2, 系数2, 亮度调节量)
#结果图像 = 图像1*系数1 + 图像2*系数2 + 亮度调节量
#亮度调节量不能省略, 系数越小越淡
result = cv2.addWeighted(img1, 1, img2, 1, 0)

3.图像类型转换

OpenCV内置200+转换方法,以下用几个具有代表性的方法作为示例。

#彩色转灰度
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)

#BGR转RGB
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)

#灰度转BGR,从单通道变成3个有一样值的BGR通道。看起来还是灰色
img2 = cv2.cvtColor(img1, cv2.COLOR_GRAY2BGR)

4.图像缩放

#目标图像 = cv2.resize(原始图像,缩放大小)
#(122, 122)先列后行
img2 = cv2.rezise(img1, (122, 122))
#或者
rows, cols = img1.shape[:2]
img2 = cv2.rezise(img1, (round(cols*0.5), round(rows*1.2)))#用round取整

#目标图像 = cv2.resize(原始图像,缩放大小, fx, fy)
#fx, fy为缩放大小,1为不变
img2 = cv2.rezise(img1, None, fx = 0.5, fy = 0.7)

#缩放大小和fx,fy设置一个即可

5.图像翻转

#img2 = cv2.flip(img1, flipCode)
#flipCode = 0 以X轴为对称轴上下翻转
#flipCode > 0 以y轴为对称轴左右翻转
#flipCode < 0 以x, y轴为对称轴同时翻转
img2 = cv2.flip(img1, 1)

6.阈值分割

Threshold_Tutorial_Theory_Base_Figure.png

二进制阈值化 Threshold Binary

给定阈值,高于阈值的为最大值;小于阈值的为最小值。

Threshold_Tutorial_Theory_Binary.png

反二进制阈值化 Threshold Binary, Inverted

给定阈值,高于阈值的为最小值;小于阈值的为最大值

Threshold_Tutorial_Theory_Binary_Inverted.png

截断阈值化 Truncate

比阈值大的值都被赋予阈值。

Threshold_Tutorial_Theory_Truncate.png

阈值化为0 Threshold to Zero

大于等于阈值的值不变,小于阈值的值化为0。

Threshold_Tutorial_Theory_Zero.png

反阈值化为0 Threshold to Zero, Inverted

大于等于阈值的值化为0,小于阈值的值不变。

Threshold_Tutorial_Theory_Zero_Inverted.png
#retval, img2 = cv2.threshold(img1, threshold, maxval, type)
#retval:阈值, threshold: 阈值, maxval: 阈值分割以后的最大值, type: 类型。

#二进制阈值化
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_BINARY)

#反二进制阈值化
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_BINARY_INV)

#截断阈值化
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_TRUNC)

#阈值化为0
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_TOZERO)

#反阈值化为0
r, img2 = cv2.threshold(img1, 127, 255, cv2.THRESH_TOZERO_INV)
显示评论 (0)

文章评论

相关推荐

Yolov5_Seg输出解析

通过矩阵乘法(在代码中称为“matmul”)来计算分割掩码的原因,主要与实例分割网络(例如 YOLOv5 Segmentation)的实现方式有关。这种方法实际上是一种高效的特征图与目标分割系数组合的…

Ubuntu交叉编译Python

在 Ubuntu 上交叉编译 Python 的流程通常用于为不同平台生成可执行文件(如 ARM、MIPS 等)。以下是一般的操作步骤: 1. 安装必要的依赖工具 首先,确保已经安装了编译所需的工具和依…