OpenCV相关函数

news2024/12/15 12:43:40

一、二值化函数(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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bean后处理器的作用

这是beanFactory中常见的一些后处理器&#xff1a; 其中这俩个属于bean后处理器&#xff1a; internalAutowiredAnnotationProcessor解析Autowired、Value internalCommonAnnotationProcessor解析Resource、PostConstruct、PreDestroy Bean后处理器的作用&#xff1a;为Bean…

YOLOv11融合[CVPR2024]Starnet中的star block取模块

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewri…

日常灵感:听劝是一种天赋

希望这段分享能给你提供一些新的角度&#xff0c;让你在自己的工作和生活中更好地利用这份“听劝”的天赋&#xff01; 父与子的救赎&#xff1a;听劝的天赋 学霸爸爸李先生是一个典型的"别人家的父母"。 他从小就是学霸&#xff0c;凭借过硬的学习能力从重点高中一…

The Rise and Potential of Large Language ModelBased Agents:A Survey---讨论

讨论 论法学硕士研究与Agent研究的互利性 近年来&#xff0c;随着激光诱导金属化技术的发展&#xff0c;激光诱导金属化与化学剂交叉领域的研究取得了长足的进步&#xff0c;促进了这两个领域的发展。在此&#xff0c;我们期待着LLM研究和Agent研究相互提供的一些益处和发展机…

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook&#xff0c;返回一个函数的 memoized的值&#xff1b; 2、如果多次传入的依赖项不变&#xff0c;那么多次定义的时候&#xff0c;返回的值是相同的,防止频繁触发更新&#xff1b; 3、多应用在 父组件为函…

Transformer: Attention Is All You Need (2017) 翻译

论文&#xff1a;Attention Is All You Need 下载地址如下: download: Transformer Attention Is All you need Attention Is All You Need 中文 《Attention Is All You Need》是《Transformer》模型的开创性论文&#xff0c;提出了一种全新的基于注意力机制的架构&#xf…

Git-分支(branch)常用命令

分支 我们在做项目开发的时候&#xff0c;无论是软件项目还是其他机械工程项目&#xff0c;我们为了提高效率以及合理的节省时间等等原因&#xff0c;现在都不再是线性进行&#xff0c;而是将一个项目抽离出诸进行线&#xff0c;每一条线在git中我们就叫做分支&#xff0c;bran…

【AIGC进阶-ChatGPT提示词副业解析】反向心理学在沟通中的运用:激将法的艺术

引言 在日常沟通和管理中&#xff0c;直接的表达方式并不总能达到预期效果。反向心理学&#xff0c;特别是其中的激将法&#xff0c;作为一种独特的沟通技巧&#xff0c;往往能在看似消极的表达中激发出积极的反应。本文将深入探讨反向心理学中激将法的运用技巧、实施策略及其…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展&#xff0c;有力推动了社会的数智化转型&#xff1b;与此同时&#xff0c;带来的相关安全风险也日益凸显。近日&#xff0c;在北京市举办的通明湖人工智能开发与应用大会上&#xff0c;360智脑总裁张向征以“大模型安全研究与实践”为主题&…

lc46全排列——回溯

46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 法1&#xff1a;暴力枚举 总共n!种全排列&#xff0c;一一列举出来放入list就行&#xff0c;关键是怎么去枚举呢&#xff1f;那就每次随机取一个&#xff0c;然后删去这个&#xff0c;再从剩下的数组中继续去随机选一个&a…

在线设计平台:Axure新手的在线设计助手

Axure是一款在产品设计、用户体验和交互设计领域广泛使用的强大原型设计工具。它使设计师和产品经理能够迅速构建高保真原型&#xff0c;验证设计和功能&#xff0c;并进行用户测试。结合在线设计平台的协作特性&#xff0c;团队可以更高效地创建、分享和优化原型&#xff0c;加…

Burp与小程序梦中情缘

前言 在日常渗透工作中&#xff0c;有时需要对微信小程序进行抓包渗透&#xff0c;通过抓包&#xff0c;我们可以捕获小程序与服务器之间的通信数据&#xff0c;分析这些数据可以帮助我们发现潜在的安全漏洞&#xff0c;本文通过讲述三个方法在PC端来对小程序抓包渗透 文章目…

gpu硬件架构

1.简介 NVIDIA在视觉计算和人工智能&#xff08;AI&#xff09;领域处于领先地位&#xff1b;其旗舰GPU已成为解决包括高性能计算和人工智能在内的各个领域复杂计算挑战所不可或缺的。虽然它们的规格经常被讨论&#xff0c;但很难掌握各种组件的清晰完整的图景。 这些GPU的高性…

SpringCloud集成sleuth和zipkin实现微服务链路追踪

文章目录 前言技术积累spring cloud sleuth介绍zipkin介绍Zipkin与Sleuth的协作 SpringCloud多模块搭建Zipkin Server部署docker pull 镜像启动zipkin server SpringCloud 接入 Sleuth 与 Zipkinpom引入依赖 (springboot2.6)appilication.yml配置修改增加测试链路代码 调用微服…

OBS + SRS:打造专业级直播环境的入门指南

OBS SRS&#xff1a;打造专业级直播环境的入门指南 1. OBS简介2. OBS核心功能详解2.1 场景&#xff08;Scenes&#xff09;管理2.2 源&#xff08;Sources&#xff09;控制2.3 混音器功能2.4 滤镜与特效2.5 直播控制面板 3. OBS推流到SRS服务器配置指南3.1 环境准备3.2 OBS推流…

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; 主…

前端(六)浮动流

浮动流 文章目录 浮动流一、标准流二、浮动流 一、标准流 所谓网页布局就是网页排版的方式&#xff0c;css中有三种网页布局的方式&#xff1a;标准流、浮动流和定位流。 标准流也称文档流&#xff0c;这是浏览器默认的排版方式。标准流中网页的元素会按从左往右、从上往下的…

双内核架构 Xenomai 4 安装教程

Xenomai 4是一种双内核架构, 继承了Xenomai系列的特点&#xff0c;通过在Linux内核中嵌入一个辅助核心&#xff08;companion core&#xff09;&#xff0c;来提供实时能力。这个辅助核心专门处理那些需要极低且有界响应时间的任务。 本文将在官网教程(https://evlproject.org/…

【安全研究】某黑产网站后台滲透与逆向分析

文章目录 x01. 前言x02. 分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与…

【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记

文章目录 微信小程序字符串字符串模板字符串拼接 上传图片编写JS代码编写wxml代码编写wxss代码 GET请求测试编写测试代码域名不合法问题 GET和POST请求测试编写JS代码编写wxml代码编写wxss代码 效果展示 微信小程序字符串 字符串模板 这是ES6引入的特性&#xff0c;允许你通过…