OpenCV day5

函数内容接上文:OpenCV day4-CSDN博客

目录

9.cv2.adaptiveThreshold():

10.cv2.split():

11.cv2.merge():

12.cv2.add():

13.cv2.subtract():

14.cv2.multiply():

15.cv2.divide():

16.cv2.bitwise_and():

17.cv2.bitwise_or():

18.cv2.inRange():

19.cv2.getRotationMatrix2D():

21.cv2.flip():

22.cv2.resize():

23.cv2.getPerspectiveTransform():

24.cv2.warpPerspective():

透视变换练习1:

透视变换练习2:


9.cv2.adaptiveThreshold():

|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 功能 | 对图像进行局部自适应阈值化,解决光照不均问题,生成二值图像。 |
| 参数 | 1. src:输入灰度图像(单通道)。 2. maxValue:满足条件时赋予的像素值(如255)。 3. adaptiveMethod:阈值计算方式(ADAPTIVE_THRESH_MEAN_CADAPTIVE_THRESH_GAUSSIAN_C)。 4. thresholdType:二值化类型(THRESH_BINARYTHRESH_BINARY_INV)。 5. blockSize:局部邻域大小(奇数,如11)。 6. C:从均值/高斯均值中减去的常数(用于微调阈值)。 |
| 返回值 | 二值化后的图像(numpy.ndarray)。 |

关键区别

  • 普通阈值 (如cv2.threshold):全局统一阈值。

  • 自适应阈值 :每个像素的阈值根据周围像素动态计算,适合光照不均的图像。

10.cv2.split():

|---------|-----------------------------------------------|
| 功能 | 将多通道图像(如BGR)拆分为单通道数组。 |
| 参数 | src:输入的多通道图像(numpy.ndarray,如BGR格式的3通道图像)。 |
| 返回值 | 返回单通道数组的元组(如BGR图像返回(B, G, R)三个通道)。 |

**11.**cv2.merge():

|---------|----------------------------------------|
| 功能 | 将多个单通道数组合并成一个多通道图像(如合并 B、G、R 通道成彩色图像)。 |
| 参数 | mv:一个包含单通道数组的列表或元组(如 [B, G, R])。 |
| 返回值 | 合并后的多通道图像(numpy.ndarray)。 |

关键点

  • 通常与 cv2.split() 配合使用,用于通道分离后的重新合并。

  • 输入的通道顺序决定输出图像的格式(如 [R, G, B] 会生成 RGB 图像,而 OpenCV 默认是 BGR)。

12.cv2.add():

|---------|--------------------------------------------------------------------------------------------------------------|
| 功能 | 对两张图像(或图像与标量)进行饱和加法运算(像素值超过最大值时截断)。 |
| 参数 | 1. src1:第一张输入图像或标量值。 2. src2:第二张输入图像或标量值。 3. mask(可选):掩膜,指定操作区域。 4. dtype(可选):输出数据类型(如 cv2.CV_8U)。 |
| 返回值 | 加法结果图像(numpy.ndarray)。 |

关键特性

  • 饱和运算 :结果超出范围时自动截断(如 uint8 超过 255 则取 255)。

  • numpy.add() 区别:NumPy 是模运算(256 → 0),而 OpenCV 是截断(256 → 255)。

**13.**cv2.subtract():

|---------|--------------------------------------------------------------------------------------------------------|
| 功能 | 对两张图像(或图像与标量)进行饱和减法运算(像素值低于最小值时截断为0)。 |
| 参数 | 1. src1:被减图像或标量值。 2. src2:减数图像或标量值。 3. mask(可选):掩膜,指定操作区域。 4. dtype(可选):输出数据类型(如 cv2.CV_8U)。 |
| 返回值 | 减法结果图像(numpy.ndarray)。 |

14.cv2.multiply():

|---------|------------------------------------------------------------------------------------------------------------------|
| 功能 | 对两张图像(或图像与标量)进行饱和乘法运算(像素值超过最大值时截断)。 |
| 参数 | 1. src1:第一张输入图像或标量值。 2. src2:第二张输入图像或标量值。 3. scale(可选):缩放因子(默认1.0)。 4. dtype(可选):输出数据类型(如 cv2.CV_32F)。 |
| 返回值 | 乘法结果图像(numpy.ndarray)。 |

15.cv2.divide():

|---------|-------------------------------------------------------------------------------------------------------------|
| 功能 | 对两张图像(或图像与标量)进行除法运算(支持饱和处理和类型转换)。 |
| 参数 | 1. src1:被除数图像或标量值。 2. src2:除数图像或标量值。 3. scale(可选):缩放因子(默认1.0)。 4. dtype(可选):输出数据类型(如 cv2.CV_32F)。 |
| 返回值 | 除法结果图像(numpy.ndarray)。 |

16.cv2.bitwise_and():

|---------|-------------------------------------------------------------------------------------------------------|
| 功能 | 对两张图像(或图像与标量)进行按位与运算(像素级二进制AND操作)。 |
| 参数 | 1. src1:第一张输入图像或标量值。 2. src2:第二张输入图像或标量值。 3. mask(可选):掩膜,指定操作区域(仅对掩膜非零区域操作)。 4. dst(可选):输出数组。 |
| 返回值 | 按位与结果图像(numpy.ndarray)。 |

关键特性

  • 二进制操作:对每个像素的二进制值逐位进行AND运算(同1得1,否则得0)。

  • 掩膜应用 :可通过 mask 参数限定操作区域(非掩膜区域输出为0)。

  • 典型用途:图像掩膜提取、ROI操作、位平面分析。

17.cv2.bitwise_or():

|---------|-------------------------------------------------------------------------------------------------------|
| 功能 | 对两张图像(或图像与标量)进行按位或运算(像素级二进制OR操作)。 |
| 参数 | 1. src1:第一张输入图像或标量值。 2. src2:第二张输入图像或标量值。 3. mask(可选):掩膜,指定操作区域(仅对掩膜非零区域操作)。 4. dst(可选):输出数组。 |
| 返回值 | 按位或结果图像(numpy.ndarray)。 |

对比其他位操作

  • cv2.bitwise_and():逻辑与(交集)

  • cv2.bitwise_or():逻辑或(并集)

  • cv2.bitwise_xor():逻辑异或(差异)

  • cv2.bitwise_not():逻辑非(取反)

18.cv2.inRange():

|---------|-------------------------------------------------------------------------------------------------------------------------------|
| 功能 | 检查图像中像素值是否位于指定范围内,生成二值掩膜(符合范围=255,否则=0)。 |
| 参数 | 1. src:输入图像(单通道或多通道)。 2. lowerb:范围下限(标量或数组,如 [min_B, min_G, min_R])。 3. upperb:范围上限(标量或数组,如 [max_B, max_G, max_R])。 |
| 返回值 | 二值掩膜图像(numpy.ndarray,符合范围=255,否则=0)。 |

关键特性

  • 多通道支持 :可直接处理彩色图像(需为 lowerbupperb 提供每个通道的阈值)。

  • 典型用途:颜色过滤、背景分割、对象检测(如提取绿色区域)。

19.cv2.getRotationMatrix2D():

|---------|-------------------------------------------------------------------------------------------|
| 功能 | 生成一个 2D旋转矩阵,用于图像的旋转操作(围绕指定中心点旋转)。 |
| 参数 | 1. center:旋转中心坐标 (x, y)。 2. angle:旋转角度(顺时针为正,单位:度 )。 3. scale:缩放因子(1.0表示不缩放)。 |
| 返回值 | 2×3的仿射变换矩阵(numpy.ndarray,可直接用于 cv2.warpAffine())。 |

关键特性

  • 旋转方向:角度为正值时顺时针旋转,负值逆时针旋转。

  • 中心点:旋转围绕该点进行,若设为图像中心则保持旋转后内容在视野内。

  • 缩放 :可同时缩放图像(如 scale=0.5 旋转并缩小一半)。

|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 功能 | 对图像应用仿射变换(旋转、平移、缩放、倾斜等线性变换)。 |
| 参数 | 1. src:输入图像。 2. M:2×3仿射变换矩阵(如 cv2.getRotationMatrix2D() 生成的矩阵)。 3. dsize:输出图像尺寸 (width, height)。 4. flags(可选):插值方法(如 cv2.INTER_LINEAR)。 5. borderMode(可选):边界填充方式(如 cv2.BORDER_CONSTANT)。 6. borderValue(可选):填充边界时的颜色(默认为黑色)。 |
| 返回值 | 变换后的图像(numpy.ndarray)。 |

关键特性

  • 仿射变换:保持直线和平行性,适用于旋转、平移、缩放等操作。

  • 插值方法 :推荐 cv2.INTER_LINEAR(平衡速度与质量)或 cv2.INTER_CUBIC(高质量)。

  • 边界处理 :超出原图范围的区域默认填充黑色,可通过 borderValue 修改(如填充白色)。

21.cv2.flip():

|---------|------------------------------------------------------------------------------------------------|
| 功能 | 对图像进行翻转操作(水平、垂直或双向翻转)。 |
| 参数 | 1. src:输入图像。 2. flipCode:翻转方向控制:   • 0:垂直翻转(沿X轴)   • 1:水平翻转(沿Y轴)   • -1:双向翻转(先水平后垂直) |
| 返回值 | 翻转后的图像(numpy.ndarray)。 |

关键特性

  • 原地操作:不修改原图,返回新图像。

  • 无插值:直接像素映射,速度极快。

  • 多通道支持:彩色图像(BGR/RGB)也可直接翻转。

22.cv2.resize():

项目 说明
功能 调整图像尺寸(放大或缩小)。
参数 1. src:输入图像。 2. dsize:目标尺寸 (width, height)。 3. fx, fy(可选):沿x/y轴的缩放因子(与dsize二选一)。 4. interpolation(可选):插值方法(默认cv2.INTER_LINEAR)。
返回值 缩放后的图像(numpy.ndarray)。

常用插值方法

  • cv2.INTER_NEAREST:最近邻(速度快,质量低)。

  • cv2.INTER_LINEAR:双线性(默认,平衡速度与质量)。

  • cv2.INTER_CUBIC:双三次(高质量,适合放大)。

  • cv2.INTER_AREA:区域插值(适合缩小)。

注意

  • dsize 参数格式为 (宽度, 高度),与 numpy 的 (行, 列) 相反。

  • 同时指定 dsizefx/fy 时,dsize 优先生效。

**23.**cv2.getPerspectiveTransform():

|---------|--------------------------------------------------------------------------------------------------|
| 功能 | 计算 透视变换矩阵(从4个源点映射到4个目标点的3×3变换矩阵)。 |
| 参数 | 1. src:源图像中4个点的坐标(np.float32格式,形如[[x1,y1],...,[x4,y4]])。 2. dst:目标图像中对应的4个点坐标(格式同src)。 |
| 返回值 | 3×3透视变换矩阵(numpy.ndarray,用于cv2.warpPerspective())。 |


关键特性

  1. 点对要求

    • 需要 精确4组对应点(不能多或少)。

    • 点顺序需一致(如左上、右上、左下、右下)。

注意事项

  • 输入点类型 :必须是np.float32,否则报错。

  • 点顺序一致性:若源点与目标点顺序不匹配,会导致扭曲异常。

  • 与仿射变换区别:透视变换需要4个点(仿射变换仅需3个点)。

24.cv2.warpPerspective():

|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 功能 | 对图像应用透视变换(将图像投影到新的视角平面,如倾斜矫正、视角转换)。 |
| 参数 | 1. src:输入图像。 2. M:3×3透视变换矩阵(来自cv2.getPerspectiveTransform())。 3. dsize:输出图像尺寸 (width, height)。 4. flags(可选):插值方法(如 cv2.INTER_LINEAR)。 5. borderMode(可选):边界填充方式(如 cv2.BORDER_CONSTANT)。 6. borderValue(可选):填充颜色(默认为黑色)。 |
| 返回值 | 透视变换后的图像(numpy.ndarray)。 |

核心特性

  1. 透视变换矩阵

    • 需通过 cv2.getPerspectiveTransform() 或手动计算得到3×3矩阵。
  2. 插值方法

    • cv2.INTER_LINEAR(默认):平衡速度与质量。

    • cv2.INTER_CUBIC:高质量,适合放大。

    • cv2.INTER_NEAREST:速度快但锯齿明显。

  3. 边界处理

    • 默认填充黑色(borderValue=(0, 0, 0)),可设置为白色或其他颜色。

透视变换练习1:

python 复制代码
import cv2
import numpy as np

img = cv2.imread('../images/youhua.png')
cv2.imshow("original image", img)
h, w, _ = img.shape

# 源图像中四个角点
src = np.array([[170, 140],
                [630, 40],
                [80, 500],
                [660, 560]], dtype="float32")

# 目标图像中四个点
dst = np.array([[50, 10],
                [700, 10],
                [50, 550],
                [700, 550]], dtype="float32")

# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(src, dst)

# 指定背景为白色
per_img = cv2.warpPerspective(img, M, (w, h), borderValue=(255, 255, 255))

cv2.imshow("perspective image", per_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

透视变换练习2:

python 复制代码
import cv2
import numpy as np

img = cv2.imread('../images/hello.png')
cv2.imshow("original image", img)
h, w, _ = img.shape

# 源图像中四个角点
src = np.float32([
    [80, 240],
    [350, 120],
    [200, 430],
    [450, 258]

])


# 目标图像中四个点
dst = np.float32([
    [0, 0],
    [450, 0],
    [0, 330],
    [450, 330]
])

# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(src, dst)

# 指定背景为白色
per_img = cv2.warpPerspective(img, M, (450, 330), borderValue=(255, 255, 255))

cv2.imshow("perspective image", per_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

相关推荐
多巴胺与内啡肽.4 小时前
Opencv进阶操作:图像拼接
人工智能·opencv·计算机视觉
白熊1884 小时前
【计算机视觉】OpenCV实战项目:ETcTI_smart_parking智能停车系统深度解析
人工智能·opencv·计算机视觉
HockerF6 小时前
交叉编译 opencv-4.10
人工智能·opencv·计算机视觉
新知图书6 小时前
使用OpenCV的VideoCapture播放视频文件示例
opencv·视频
萧霍之6 小时前
基于onnxruntime结合PyQt快速搭建视觉原型Demo
pytorch·python·yolo·计算机视觉
鸿蒙布道师7 小时前
英伟达开源Llama-Nemotron系列模型:14万H100小时训练细节全解析
深度学习·神经网络·opencv·机器学习·自然语言处理·数据挖掘·llama
知舟不叙8 小时前
基于OpenCV的人脸识别:LBPH算法
人工智能·opencv·人脸检测·lbph算法
白熊1889 小时前
【计算机视觉】基于Python的相机标定项目Camera-Calibration深度解析
python·数码相机·计算机视觉
白熊1889 小时前
【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析
人工智能·opencv·计算机视觉
QUST-Learn3D10 小时前
OpenCV提取图像中的暗斑/亮斑
人工智能·opencv·计算机视觉