OpenCV相关函数

ops/2024/12/16 7:15:04/

一、二值化函数(threshold)

功能:将灰度图像转换为二值图像,通常用于图像分割。通过设置阈值,把图像中低于阈值的像素设为0,高于阈值的像素设为1。

参数

    src:输入图像。

    thresh:阈值,决定哪些像素值将被设置为白色(1)或黑色(0)。

    max_val:最大值,当像素值大于阈值时,赋予的值。

    type:二值化的类型,常用的有cv2.THRESH_BINARY(标准二值化)或cv2.THRESH_BINARY_INV(反向二值化)。

返回值:二值化后的图像。

应用:

import cv2
import numpy as np# 读取彩色图
img = cv2.imread("./flower.png")# 调整图片大小为400x400像素
img = cv2.resize(img, (400,400))# 先转换成灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_binary = np.zeros_like(img_gray)# 设置一个阈值
thresh = 150# 遍历灰度图的每一个像素点
for i in range(img_gray.shape[0]):for j in range(img_gray.shape[1]):if img_gray[i][j] <= thresh:img_binary[i, j] = 0else:img_binary[i, j] = 255cv2.imshow('image', img)
cv2.imshow('image_gray', img_gray)
cv2.imshow('image_binary', img_binary)
cv2.waitKey(0)

二、自适应二值化函数(adaptiveThreshold)

功能:将灰度图像转换为二值图像,通常用于图像分割。通过设置阈值,把图像中低于阈值的像素设为0,高于阈值的像素设为1。

参数

    src:输入图像。

    thresh:阈值,决定哪些像素值将被设置为白色(1)或黑色(0)。

    max_val:最大值,当像素值大于阈值时,赋予的值。

    type:二值化的类型,常用的有cv2.THRESH_BINARY(标准二值化)或cv2.THRESH_BINARY_INV(反向二值化)。

返回值:二值化后的图像。

应用:

# 导入OpenCV库,用于图像处理
import cv2# 读取本地的图像文件
img = cv2.imread("lena.png")# 调整图片大小为400x400像素
img = cv2.resize(img, (400,400))# 将图像从BGR颜色空间转换为灰度图像
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 自适应阈值二值化
# 对灰度图像进行自适应二值化处理,以增强图像处理效果
img_adaptive_binary = cv2.adaptiveThreshold(img_gray,      # 参数1:img_gray 输入的灰度图像255,  # 参数2:255 二值化处理后的最大值cv2.ADAPTIVE_THRESH_MEAN_C,     # 参数3:cv2.ADAPTIVE_THRESH_MEAN_C 使用局部均值作为阈值计算方法cv2.THRESH_BINARY,        # 参数4:cv2.THRESH_BINARY 使用二值化阈值处理方式555,           # 参数5: 邻域大小,用于计算阈值的区域范围5)    # 参数6: 常数C,计算阈值时从均值中减去的值# 显示原始图像
cv2.imshow('image', img)
# 显示灰度图像
cv2.imshow('image_gray', img_gray)
# 显示二值图像
cv2.imshow('image_binary', img_adaptive_binary)
# 等待用户按键,这里作为代码执行的暂停点
cv2.waitKey(0)

三、腐蚀函数(erode)

功能:腐蚀操作是一种形态学变换,作用是使图像中的白色区域(前景)缩小。通过最小值滤波器操作,白色区域会被黑色像素“腐蚀”。

参数

    src:输入图像。

    kernel:结构元素(卷积核),定义腐蚀操作的范围和形状。

    iterations:腐蚀操作的次数。

返回值:腐蚀后的图像。

应用:

# 导入OpenCV库,用于图像处理
import cv2# 读取二值图像文件,准备进行形态学处理
img_binary = cv2.imread("./morph.png")# 创建一个3x3的椭圆形结构元素,用于形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))# 对二值图像进行侵蚀操作,iterations参数指定侵蚀的次数
# 侵蚀操作可以用于减少图像中白色区域的大小,这里是5次
img_erode = cv2.erode(img_binary,kernel,iterations=5)# 显示原始二值图像,用于对比处理效果
cv2.imshow("img_binary",img_binary)
# 显示经过侵蚀操作后的图像
cv2.imshow("img_erode",img_erode)
# 等待用户按键,这里用于保持窗口显示,直到用户按下任意键
cv2.waitKey(0)

四、膨胀函数(dilate)

功能:膨胀操作是一种形态学变换,作用是使图像中的白色区域(前景)扩展。通过最大值滤波器操作,白色区域会向周围黑色像素扩展。

参数

    src:输入图像。

    kernel:结构元素(卷积核),定义膨胀操作的范围和形状。

    iterations:膨胀操作的次数。

返回值:膨胀后的图像。

应用:

import cv2# 读取图像
img = cv2.imread("./lena.png")# 调整图片大小为400x400像素
img = cv2.resize(img, (400,400))# 将图像从BGR颜色空间转换为灰度图像
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 自适应阈值二值化
# 对灰度图像进行自适应二值化处理,以增强图像处理效果
img_adaptive_binary = cv2.adaptiveThreshold(img_gray,      # 参数1:输入的灰度图像255,  # 参数2: 二值化处理后的最大值cv2.ADAPTIVE_THRESH_GAUSSIAN_C,     # 参数3: 使用局部均值作为阈值计算方法cv2.THRESH_BINARY_INV,        # 参数4: 使用二值化阈值处理方式7,           # 参数5: 邻域大小,用于计算阈值的区域范围5)    # 参数6: 常数C,计算阈值时从均值中减去的值# 创建椭圆形结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
# 腐蚀图像
img_erode = cv2.erode(img_adaptive_binary,kernel)
# 先腐蚀后膨胀图像
img_erode_dilate = cv2.dilate(img_erode,kernel)# 显示腐蚀后的图像
cv2.imshow("img_erode",img_erode)
# 显示自适应二值化后的图像
cv2.imshow("img_adaptive_binary",img_adaptive_binary)
# 显示先腐蚀后膨胀的图像
cv2.imshow("img_erode_dilate",img_erode_dilate)
# 等待按键按下
cv2.waitKey(0)

五、仿射变换函数(warpAffine)

功能:仿射变换是一种保持图像平行线不变的几何变换,包括平移、旋转、缩放和剪切。通过仿射矩阵对图像进行变换。

参数

    src:输入图像。

    M:2x3的仿射变换矩阵,用于定义变换的内容(平移、旋转等)。

    dsize:输出图像的尺寸。

    flags:插值方法,常见的有cv2.INTER_LINEARcv2.INTER_NEAREST等。

    borderMode:边界模式,定义如何处理图像边界的像素值。

返回值:变换后的图像。

应用:

import cv2# 读取图像文件
img = cv2.imread('./lena.png')# 调整图像大小到400x400像素
img = cv2.resize(img,(400,400))# 计算图像旋转的变换矩阵,围绕图像中心旋转45度,缩放因子为1
M = cv2.getRotationMatrix2D((img.shape[1]/2, img.shape[0]/2), 45, 1)# 应用仿射变换,旋转图像
img_warp = cv2.warpAffine(img,  # 要旋转的图像M,    # 变换矩阵(img.shape[1], img.shape[0]), # 输出图像的大小flags=cv2.INTER_LINEAR,   # 插值方式borderMode=cv2.BORDER_WRAP   # 边缘填充方式,默认是常数填充显示为黑色)# 显示原图像
cv2.imshow('img', img)
# 显示变换后的图像
cv2.imshow('img_warp', img_warp)
# 等待按键按下后关闭所有窗口
cv2.waitKey(0)

六、透视变换函数(warpPerspective)

功能:透视变换是一种更复杂的几何变换,主要用于图像的视角转换,可以模拟拍摄角度的变化。与仿射变换不同,透视变换不保持平行线平行。

参数

    src:输入图像。

     M:3x3的透视变换矩阵,通常通过四个点对应来计算(如cv2.getPerspectiveTransform)。

    dsize:输出图像的尺寸。

    flags:插值方法,常见的有cv2.INTER_LINEARcv2.INTER_CUBIC等。

    borderMode:边界模式,定义如何处理图像边界的像素值。

返回值:透视变换后的图像。

应用:

import cv2
import numpy as np# 读取图片文件
img = cv2.imread("./card.png")# 定义原始图像中的四个角点
points1 = np.array([[200,100],[700,150],[140,400],[650,460]], dtype=np.float32)# 定义目标图像中的四个角点,用于进行透视变换
points2 = np.array([ [0,0], [img.shape[1],0], [0,img.shape[0]], [img.shape[1], img.shape[0]]], dtype=np.float32)# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(points1, points2)# 应用透视变换矩阵到原始图像,获得变换后的图像
img_warp = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))# 显示原始图像
cv2.imshow("img", img)
# 显示透视变换后的图像
cv2.imshow("img_warp", img_warp)
# 等待按键按下,然后关闭所有窗口
cv2.waitKey(0)


http://www.ppmy.cn/ops/142323.html

相关文章

【初识数据结构】堆的详解以及Topk问题

数据结构第七课 1. 前言&#x1f6a9;2. 堆的概念以及结构&#x1f6a9;3. 堆的实现&#x1f6a9;3.1 初始化结构&#x1f3f4;3.2 初始化函数&#x1f3f4;3.3 插入函数&#x1f3f4;3.4 向上调整函数&#x1f3f4;3.5 删除函数&#x1f3f4;3.6 向下调整函数&#x1f3f4;3.7…

【html 常用MIME类型列表】

本表仅列出了常用的MIME类型&#xff0c;完整列表参考文档。 浏览器通常使用 MIME 类型&#xff08;而不是文件扩展名&#xff09;来确定如何处理 URL&#xff0c;因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。 如果配置不正确&#xff0c;浏览器可能会曲解文件内容…

Leetcode 3388. Count Beautiful Splits in an Array

Leetcode 3388. Count Beautiful Splits in an Array 1. 解题思路2. 代码实现 题目链接&#xff1a;3388. Count Beautiful Splits in an Array 1. 解题思路 这一题我的思路还是比较暴力的&#xff0c;首先&#xff0c;我们通过z算法&#xff0c;可以很快找到所有满足subarr…

音频客观测评方法PESQ

一、简介 语音质量感知评估&#xff08;Perceptual Evaluation of Speech Quality&#xff09;是一系列的标准&#xff0c;包括一种用于自动评估电话系统用户所体验到的语音质量的测试方法。该标准于2001年被确定为ITU-T P.862建议书[1]。PESQ被电话制造商、网络设备供应商和电…

使用elasticsearch-java客户端API生成DSL语句

在Elasticsearch7.15.0之后&#xff0c;官方提供了elasticsearch-java包作为java客户端工具包&#xff0c;用于取代elasticsearch-rest-high-level-client&#xff0c;其底层依然依赖Elasticsearch Low Level REST 客户端&#xff0c;即elasticsearch-rest-client。 elasticsea…

CentOS 上如何查看 SSH 服务使用的端口号?

我们知道&#xff0c;linux操作系统中的SSH默认情况下&#xff0c;端口是使用22&#xff0c;但是有些线上服务器并不是使用的默认端口&#xff0c;那么这个时候&#xff0c;我们应该如何快速知道SSH使用的哪个端口呢&#xff1f; 1、通过配置文件查看 cat /etc/ssh/sshd_confi…

行为树详解(4)——节点参数配置化

【分析】 行为树是否足够灵活强大依赖于足够丰富的各类条件节点和动作节点&#xff0c;在实现这些节点时&#xff0c;不可避免的&#xff0c;节点本身需要有一些参数供配置。 这些参数可以分为静态的固定值的参数以及动态读取设置的参数。 静态参数直接设置为Public即可&…

Python毕业设计选题:基于django+vue的疫情数据可视化分析系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 员工管理 疫情信息管理 检测预约管理 检测结果…