OpenCV相关函数

一、二值化函数(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] = 0
        else:
            img_binary[i, j] = 255

cv2.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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937094.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端html,vue使用第三方地图详细教程,以百度地图为例,实现地图标注,导航,定位,路线规划,坐标转换

目录 示例&#xff1a; 准备&#xff1a; ?编辑 开始&#xff1a; 1、新建页面&#xff0c;在script标签中引入百度地图的api数据&#xff0c;把自己在控制台创建的应用的ak替换上去 2、创建一个dom对象&#xff0c;设置宽高 3、在js中初始化地图 进阶&#xff1a; 1…

【经验分享】容器云搭建的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…

【Liunx篇】基础开发工具 - vim

文章目录 一.vim的基本概念1.正常/命令模式2.插入模式3.底行模式/末行模式4.视图模式5.替换模式 二.vim的基本操作1.进入vim&#xff1a;2.退出vim: 三.vim正常模式命令集1.光标定位&#xff1a;2.复制/粘贴3.撤销4.剪切/删除5. 更改 四.vim底行模式命令集1.保存/退出2.调出行号…

数据结构---树(Tree)

1. 简介 在数据结构中&#xff0c;树是一种层次结构的数据结构&#xff0c;由节点&#xff08;node&#xff09;组成&#xff0c;其中每个节点通过边&#xff08;edge&#xff09;与其他节点连接。树是一种非线性的数据结构&#xff0c;广泛用于表示具有层级关系的数据。常见的…

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中&#xff0c;我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来&#xff0c;让我们开始新建一个项目吧&#xff01; 新建项目 首先进入unityHub的项目页面&#xff0c;点击“新项目”&#xff1a; 我们这个系列将会以2D平台…

Ubuntu K8s

https://serious-lose.notion.site/Ubuntu-K8s-d8d6a978ad784c1baa2fc8c531fbce68?pvs74 2 核 2G Ubuntu 20.4 IP 172.24.53.10 kubeadmkubeletkubectl版本1.23.01.23.01.23.0 kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件 kubeadm&#xff1a; 主…

【ARM】ARM架构麒麟V10安装jdk1.8

ARM架构麒麟V10安装jdk1.8&#xff0c;就一句话安装 yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel 关注我&#xff0c;继续【ARM】安装mysql 简单快捷。

Redis--高并发分布式结构

目录 一、引言 二、redis 1.什么是redis&#xff1f; 三、基础概念 1.什么是分布式&#xff1f; 2.应用服务和数据库服务分离 3.负载均衡 4.分库分表 5.微服务架构 四、总结 一、引言 本篇文章就简单介绍一下什么是redis&#xff0c;以及一些关于高并发和分布式结构的…

Repo管理

文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道&#xff0c;Git是用来管理某一个仓库&#xff0c;那当一个项目用到了多个仓库时&#xff0c;怎么来同步管理这些仓库呢&#xff1f;这个时候就可以引入Repo管理。 Repo介绍 …

python 数据分析之地图数据绘制

python 数据分析之地图数据绘制 1、根据历史的2023年GDP数据做地图分析 import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams[font.family] SimHei import pandas as pd import folium from folium import Map import geopandas as…

分治算法(单选题)

2-1 分数 2 下列多少种排序算法用了分治法&#xff1f; 堆排序插入排序归并排序快速排序选择排序希尔排序 A.2 B.3 C.4 D.5 正确答案 A 2-2 分数 2 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题&#xff0c;分别解决问题&#xff0c;最后将子…

探索 HTTP 请求头中的 “Host” 字段及其安全风险

探索 HTTP 请求头中的 “Host” 字段及其安全风险 大家好&#xff0c;今天我们来聊聊 HTTP 请求头中的“Host”字段&#xff0c;以及它的使用方法和安全风险。 什么是Host字段 在 HTTP 请求头中&#xff0c;“Host”字段是一个至关重要的部分。它告诉服务器&#xff0c;我们…

将 Ubuntu 22.04 LTS 升级到 24.04 LTS

Ubuntu 24.04 LTS 将支持 Ubuntu 桌面、Ubuntu 服务器和 Ubuntu Core 5 年&#xff0c;直到 2029 年 4 月。 本文将介绍如何将当前 Ubuntu 22.04 系统升级到最新 Ubuntu 24.04 LTS版本。 备份个人数据 以防万一&#xff0c;把系统中的重要数据自己备份一下~ 安装配置SSH访问…

渗透测试-前端验签绕过之SHA256

本文是高级前端加解密与验签实战的第1篇文章&#xff0c;本系列文章实验靶场为Yakit里自带的Vulinbox靶场&#xff0c;本文讲述的是绕过SHA256签名来爆破登录。 绕过 通过查看源代码可以看到key为 1234123412341234通过查看源代码可以看到是通过SHA256来进行签名的&#xff0…

解锁医学数据分析新姿势:堆叠图的奇妙世界

在医学数据分析中&#xff0c;数据的可视化是一个非常重要的环节。通过图形展示&#xff0c;我们可以更直观地理解数据之间的关系和趋势。今天&#xff0c;我们将介绍一种非常有用的图形——堆叠图&#xff08;Stacked Bar Chart&#xff09;&#xff0c;并展示如何在Python中使…

接口测试Day01-HTTP请求

概念 接口&#xff1a;系统之间&#xff08;外部系统与内部系统&#xff0c;内部系统与内部系统&#xff09;数据交通的通道。 接口测试&#xff1a;校验 接口回发的 响应数据 与 预期结果 是否一致。 接口测试&#xff0c;可以绕过前端界面。直接对 服务器进行测试&#xff01…

04、GC基础知识

JVM程序在跑起来之后&#xff0c;在数据的交互过程中&#xff0c;就会有一些数据是过期不用的&#xff0c;这些数据可以看做是垃圾&#xff0c;JVM中&#xff0c;这些垃圾是不用开发者管的&#xff0c;它自己会有一套垃圾回收系统自动回收这些内存垃圾&#xff0c;以备后面继续…

一、STM32MP257开发板初体验

文章目录 STM32MP257开发板初体验1. 硬件介绍2. 下载编译源码3. 烧录4. 启动 STM32MP257开发板初体验 从本篇文章开始本专栏将详细记录学习STM32MP257过程中的学习心得&#xff0c;旨在详细掌握嵌入式LINUX中的全流程内容&#xff0c;主要包括启动流程分析、驱动分析、Yocto系…

分析M0G突破后急剧下跌内因,x.game阐述不利面延续多久

MOG最新消息显示&#xff0c;美国唐纳德-的一则声明公开表示支持一种基于以太坊网络ERC-20代币标准的病毒式meme代币——Mog Coin&#xff08;MOG&#xff09;&#xff0c;这一消息迅速发酵。然而&#xff0c;令人意想不到的是&#xff0c;在这位全球知名政治人物的背书之后&am…

P8772 求和 P8716 回文日期

文章目录 [蓝桥杯 2022 省 A] 求和[蓝桥杯 2020 省 AB2] 回文日期 [蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a…