【OpenCV】图像处理实战:边界填充与阈值详解

目录

1.边界填充

2.图像的相关数值计算

3.图像融合

4.图像阈值


1.边界填充

用的函数都是copyMakeBorder,最后的参数是填充方法

2.图像的相关数值计算

每个像素点加10

:5,:,0\]只打印前面5行 ![](https://i-blog.csdnimg.cn/direct/9c2a61a2f7f04ea3a2e214c4670dbf52.png) add是直接等于两图像的像素点值之和,但是不可以超过255,超过255就等于255 ## 3.图像融合 ![](https://i-blog.csdnimg.cn/direct/e43b174521d44b33805113b1ce3faeff.png) 图像大小不一样不能融合 进行相应的转换 ![](https://i-blog.csdnimg.cn/direct/80b528d8b4fc47c988c0d4cc7141dae1.png) 也可以将目标值设为(0,0),进行比例缩放 fx=4表示将x轴变为原来的4倍 fy=4表示将y轴变为原来的4倍 也可以缩放为其他倍数 ![](https://i-blog.csdnimg.cn/direct/57f38000302a42d38ecd9db497481150.png) 0.4是cat图像的权重,0.6是dog图像的权重,0是偏置项(给图像提亮多少) ![](https://i-blog.csdnimg.cn/direct/25ce39cd3e614ba6a3e779a07c80724d.png) ## 4.图像阈值 **函数** ```python cv2.threshold(src, thresh, maxval, type) ``` **函数作用** `cv2.threshold()` 函数的主要功能是将灰度图像转换为二值图像。在转换过程中,会把图像中每个像素的值与设定的阈值进行比较,再依据比较结果为该像素赋予新的值。 **参数解析** `cv2.threshold(src, thresh, maxval, type)` 函数包含 4 个参数,下面分别介绍: 1. src:这是输入的图像,要求必须是单通道的灰度图像。如果传入的是彩色图像,需要先将其转换为灰度图。 2. thresh:即设定的阈值,是一个浮点数或者整数。在比较时,会用图像中每个像素的值与这个阈值作对比。 3. maxval:当像素值满足阈值条件时,会将该像素的值设为这个 `maxval`。它也是一个浮点数或者整数。 4. type:表示阈值处理的类型,有多种选择,具体如下: 1. cv2.THRESH_BINARY:二值阈值,若像素值大于阈值,则设为 `maxval`,否则设为 0。 2. cv2.THRESH_BINARY_INV:反二值阈值,像素值大于阈值时设为 0,否则设为 `maxval`。 3. cv2.THRESH_TRUNC:截断阈值,像素值大于阈值时设为阈值,否则保持原像素值。 4. cv2.THRESH_TOZERO:归零阈值,像素值大于阈值时保持不变,否则设为 0。 5. cv2.THRESH_TOZERO_INV:反归零阈值,像素值大于阈值时设为 0,否则保持不变。 6. cv2.THRESH_OTSU:大津法自动阈值,会自动计算最优阈值,使用时需将该标志和前面的阈值类型结合,例如 `cv2.THRESH_BINARY + cv2.THRESH_OTSU`。 **返回值** 该函数会返回两个值: * ret:返回计算得到的阈值。如果使用了 OTSU 或 TRIANGLE 方法,就会返回自动计算出的阈值,否则返回设定的阈值。 * dst:是处理后的输出图像,为二值图像。 ```python import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图像并转换为灰度图 image = cv2.imread('example.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用不同的阈值处理 ret1, thresh1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) ret2, thresh2 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV) ret3, thresh3 = cv2.threshold(gray, 127, 255, cv2.THRESH_TRUNC) ret4, thresh4 = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO) ret5, thresh5 = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO_INV) # 使用 OTSU 方法自动计算阈值 ret6, thresh6 = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 显示结果 titles = ['Original', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV', 'OTSU'] images = [gray, thresh1, thresh2, thresh3, thresh4, thresh5, thresh6] plt.figure(figsize=(12, 8)) for i in range(7): plt.subplot(2, 4, i+1) plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.xticks([]), plt.yticks([]) plt.tight_layout() plt.show() ``` **物体检测适合用 BINARY 类型,而图像降噪可考虑 TOZERO 类型。** ![](https://i-blog.csdnimg.cn/direct/eea85e8883ff41149070a2fe4ef64fc9.png)

相关推荐
守护安静星空11 小时前
esp32开发笔记-工程搭建
笔记·单片机·嵌入式硬件·物联网·visual studio code
ljt272496066111 小时前
Compose笔记(七十七)--视频录制
笔记·android jetpack
Dfreedom.11 小时前
计算机视觉全景图
人工智能·算法·计算机视觉·图像算法
xrgs_shz12 小时前
直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和MATLAB实现
人工智能·计算机视觉·matlab
QQ6765800813 小时前
服装计算机视觉数据集 连衣裙数据集 衣服类别识别 毛衣数据集 夹克衫AI识别 衬衫识别 裤子 数据集 yolo格式数据集
人工智能·yolo·计算机视觉·连衣裙·衣服类别·毛衣数据集·夹克衫ai
周周不一样13 小时前
Andorid基础笔记2-jar&反射
笔记·pycharm·jar
智者知已应修善业13 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
凉、介14 小时前
别再把 PCIe 的 inbound/outbound、iATU 和 eDMA 混为一谈
linux·笔记·学习·嵌入式·pcie
雷工笔记17 小时前
MES / WMS / AGV 交互时序图及生产管理模块界面设计清单
人工智能·笔记
大邳草民17 小时前
Python 中 global 与 nonlocal 的语义与机制
开发语言·笔记·python