OpenCV 功能函数介绍 (二)

一,梯度处理的sobel算子函数  

功能:

用于计算图像梯度(gradient)的函数

参数:

cv2.Sobel(src, ddepth, dx, dy, ksize=3, scale=1, delta=0, borderType=None)

cv2.Sobel(输入图像 , 应该是灰度化后的图像

                输出图像的所需深度,:-1 来表示与输入图像相同的深度

                 x 方向上的导数阶数,如果你想要计算 x 方向上的梯度,设置这个参数为 1;如果你不关心 x 方向上的梯度,设置这个参数为 0。

                y 方向上的导数阶数,同上

                Sobel 核的大小,最好是1 3 5 7 9

返回值:

梯度化后的图片

应用:

import cv2# 读取一张图
img = cv2.imread("./shudu.png")# 使用sobel算子
# 水平梯度
img_sobel = cv2.Sobel(img, -1, 0, 1, ksize=3)
# 垂直梯度
img_sobel_2 = cv2.Sobel(img, -1, 1, 0, ksize=3)cv2.imshow('image', img)
cv2.imshow('img_sobel', img_sobel)
cv2.imshow('img_sobel_2', img_sobel_2)cv2.waitKey(0)
 

二,梯度处理Laplacian算子函数

 功能:

用于计算图像的拉普拉斯算子(Laplacian)

参数:

cv2.Laplacian(src, ddepth, ksize=1, scale=1, delta=0, borderType=None)

cv2.Laplacian(输入图像 , 应该是灰度化后的图像

                        输出图像的所需深度,

                         算子的大小,它必须是 1、3、5 或 7 之一

                        

返回值:

处理后的图像

应用:

import cv2# 读取一张图
img = cv2.imread("./shudu.png")# 使用拉普拉斯算子
img_lap = cv2.Laplacian(img, -1, ksize=3)cv2.imshow('image', img)
cv2.imshow('img_lap', img_lap)cv2.waitKey(0)

三,Canny算子函数

 功能:

用于边缘检测的函数

参数:

cv2.Canny(image, threshold1, threshold2, edges, apertureSize, L2gradient)

cv2.Canny(输入图像,它应该是一个灰度图像

        第一个阈值 , 用于确定边缘的初始点

        第二个阈值, 用于确定边缘的最终点      

返回值:

处理后的图片

应用:

import cv2img = cv2.imread("./6.png")# 灰度化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
_, img_binary = cv2.threshold(img_gray, 127, 255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 进行高斯滤波
img_blur = cv2.GaussianBlur(img_binary, (3,3), 3)# 边缘检测
img_canny = cv2.Canny(img_blur, 10, 70)cv2.imshow('img', img)
cv2.imshow('img_canny', img_canny)
cv2.waitKey(0)


四,findContours函数

 功能:

来进行寻找轮廓

参数:

cv2.findContours(image, mode, method, contour, hierarchy, offset.)

cv2.findContours(输入图像,一个二值图像

                              查询轮廓的方式,(

cv2.RETR_EXTERNAL:只检索最外层轮廓。

cv2.RETR_LIST:检索所有轮廓,但不创建任何父子关系。

cv2.RETR_CCOMP:检索所有轮廓,并将它们组织为两层结构,其中顶层是连通域的外边界,底层是孔的内边界。

cv2.RETR_TREE:检索所有轮廓,并重建完整的层次结构。

                                保存轮廓点坐标的方式(

v2.CHAIN_APPROX_NONE:存储所有的轮廓点,不进行任何近似。

cv2.CHAIN_APPROX_SIMPLE:压缩水平、垂直和对角线段,只保留它们的终点。

cv2.CHAIN_APPROX_TC89_L1、cv2.CHAIN_APPROX_TC89_KCOS:应用 Teh-Chin 链式近似算法的一种变体。

                                

                                

                                

返回值:‌

contours‌:轮廓是由点组成的 NumPy 数组。

‌hierarchy‌ : 轮廓的层次结构信息

 
五,drawContours函数

 功能:

用于在图像上绘制轮廓的函数

参数:

cv2.drawContours(image, contours, contourIdx, color, thickness, lineType, hierarchy, maxLevel, offset)

cv2.drawContours(输入图像,

这是一个 Python 列表,  cv2.findContours() 函数返回的 NumPy 数组。

 轮廓列表的索引值,-1表示绘制所有轮廓

 颜色     

 轮廓线条粗细              

返回值:

处理后的图像

应用

import cv2img = cv2.imread("./6.png")# 灰度化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
_, img_binary = cv2.threshold(img_gray, 127, 255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 寻找轮廓
contours, hierarchy = cv2.findContours(img_binary,cv2.RETR_LIST,   # 查询轮廓的方式cv2.CHAIN_APPROX_SIMPLE  # 保存轮廓点坐标的方式)# 绘制轮廓
img_copy = img.copy()
img_draw = cv2.drawContours(img_copy, # 要绘制轮廓的图像contours, # 轮廓的顶点坐标集 列表-1, # 轮廓列表的索引值,-1表示绘制所有轮廓(0, 0, 255),  # 颜色3   # 轮廓线条粗细)cv2.imshow('image', img)
cv2.imshow('image_draw', img_draw)
cv2.waitKey(0)

通过修改drawContours 的索引值

如图


六,透视变换函数

功能、参数、返回值

详细请看OpenCV 图片矫正-CSDN博客

应用:通过边缘检测 得到四个点坐标

import cv2
import numpy as np#输入数据
img = cv2.imread("./ts.png")
img_copy = img.copy()#高斯滤波img_blur = cv2.GaussianBlur(img,(3,3),1)#灰度化
img_gray = cv2.cvtColor(img_blur,cv2.COLOR_BGR2GRAY)#二值化
_,img_binary = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)#寻找轮廓contours, _ = cv2.findContours(img_binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)for cnt in contours:M = cv2.moments(cnt)if int(M['m00'])==0:continuearc_len = cv2.arcLength(cnt,True)approx = cv2.approxPolyDP(cnt,float(0.04)*arc_len,True)#返回逼近的多边形点集print(approx)if len(approx)==3:shape = 'triangle'elif len(approx) == 4:x,y,w,h=cv2.boundingRect(approx)ratio = w/hif 0.95<=ratio<=1.05:shape ="square"else:shape = 'rectangle'elif len(approx) == 5:shape = 'pentagon'else:shape = 'circle'cv2.drawContours(img_copy,[cnt],-1,(0,0,0),2)cx = int(M['m10'] / M['m00'])cy = int(M['m01'] / M['m00'])cv2.putText(img_copy,#图片shape,#添加文字字符串(cx,cy),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255))points1 = np.array([[221, 132], [670, 178], [148, 385], [655, 441]],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)# 3、透视变换
img_warp = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))cv2.imshow('image',img)
cv2.imshow('image_copy',img_copy)
cv2.imshow('image_warp',img_warp)cv2.waitKey(0)


七举例轮廓的外接边界框,并对比说明

外接矩形(cv2.boundingRect()

计算轮廓的外接矩形,是一个轴对齐的矩形,不考虑物体的旋转。

最小外接矩形(cv2.minAreaRect()

计算一个最小面积的外接矩形,它不一定与坐标轴对齐,而是可以旋转以最小化矩形面积

import cv2
import numpy as npimg = cv2.imread("./outline.png")
#灰度
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#二值
_,img_binary = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)#寻找轮廓
contours,_ = cv2.findContours(img_binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#绘制轮廓
img_draw = img.copy()
cv2.drawContours(img_draw,contours,-1,(0,255,255),2)#外接最小外接矩形
for i in contours:cv2.boundingRect(i)#获取左上坐标(x,y),宽w,高hx,y,w,h =cv2.boundingRect(i)cv2.rectangle(img_draw,[x,y],[x+w,y+h],(0,255,0),2)#二获取三个元素元组(中心坐标,长宽,旋转角度)ret =cv2.minAreaRect(i)#调用v2.boxPoints(ret)函数获取旋转矩阵的四个顶点box  =np.int32(cv2.boxPoints(ret))#绘制轮廓cv2.drawContours(img_draw,[box],-1,(0,0,255),3)# #第三 调用外接圆函数# (x,y),radius = cv2.minEnclosingCircle(i)# (x,y,radius) = np.int32((x,y,radius))# cv2.circle(img_draw,(x,y),radius,(255,0,255),3)cv2.imshow("img",img)
cv2.imshow("img_draw",img_draw)
cv2.waitKey(0)

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

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

相关文章

《宇宙机器人》提示错误弹窗“找不到d3dx9_43.dll”是什么原因?“d3dx9_43.dll缺失”怎么解决?

电脑游戏运行时常见问题解析&#xff1a;《宇宙机器人》提示“找不到d3dx9_43.dll”的解决之道 TGA2024落幕&#xff0c;年度最佳游戏——《宇宙机器人》&#xff0c;作为一名在软件开发领域深耕多年的从业者&#xff0c;我深知电脑游戏在运行过程中可能会遇到的各种挑战&…

PPO系列2 - GAE优势函数

策略梯度&#xff1a; 痛点&#xff1a; 1. t时刻的动作&#xff0c;其只会影响t时刻之后得到的Reward&#xff0c;和之前的无关。 2. t时刻的动作&#xff0c;对接下来邻近的几个Reward关系较大&#xff0c;跟远的关系小。 改进&#xff1a; 1. 只累加t时刻之后的Reward。 2. …

pytest入门三:setup、teardown

https://zhuanlan.zhihu.com/p/623447031 function对应类外的函数&#xff0c;每个函数调用一次 import pytest def setup_module():print(开始 module)def teardown_module():print(结束 module)def setup_function():print(开始 function)def teardown_function():print(结…

React+Antd修改Table组件滚动条样式

版本 Antd 5.x.x React 18.x.x Tsx <TabledataSource{SocrePaMing.length > 0 ? SocrePaMing : []}columns{tableScoreColumns}rowKey"attribute"pagination{false}className"custom-table"scroll{{ y: 400 }} /> Css .ant-table-body …

webstorm开发uniapp(从安装到项目运行)

1、下载uniapp插件 下载连接&#xff1a;Uniapp Tool - IntelliJ IDEs Plugin | Marketplace &#xff08;结合自己的webstorm版本下载&#xff0c;不然解析不了&#xff09; 将下载到的zip文件防在webstorm安装路径下&#xff0c;本文的地址为&#xff1a; 2、安装uniapp插…

Tomcat的下载和使用,配置控制台输出中文日志

目录 1. 简介2. 下载3. 使用3.1 文件夹展示3.1.1 控制台输出乱码 3.2 访问localhost:80803.3 访问静态资源 4. 总结 1. 简介 Tomcat&#xff0c;全称为Apache Tomcat&#xff0c;是一个开源的Web应用服务器和Servlet容器&#xff0c;由Apache软件基金会的Jakarta项目开发。它实…

低功耗视频监控丨4G无线太阳能监控系统在林业场景中如何发挥作用?

在林业领域&#xff0c;4G无线太阳能监控系统的引入标志着向绿色、智能管理迈出的重要一步。视频监控太阳能供电通过集成太阳能供电、4G无线通信、视频监控和物联网技术&#xff0c;为林业监控提供了一个绿色、智能、高效的解决方案。它不仅能够实现对森林资源的实时监控&#…

dolphinscheduler服务RPC框架源码解析(二)RPC核心注解@RpcService和@RpcMethod设计实现

1.工程目录 从3.2.1版本之后这个dolphinscheduler中的RPC框架工程就从原来的dolphinscheduler-remote工程重构到了dolphinscheduler-extract工程。 dolphinscheduler 父项目 dolphinscheduler-extract RPC服务项目 dolphinscheduler-extract-alert 监控告警服务RPC接口定义、…

解析 .proto 文件

我这里仅仅是介绍了proto这个库解析.proto文件后的参数 我也有个小demo对解析的数据进行使用&#xff0c;具体代码可以看这know-bay 下面解析不是很全面&#xff0c;但是对于现在我的来说是够用的&#xff0c;关于更加详细和全的&#xff0c;看以后是否有机会补充了 假设 .prot…

太速科技-622-基于ADRV9002 +ZYNQ7020 的软件无线电 SDR(升级AD9361)

基于ADRV9002 ZYNQ7020 的软件无线电 SDR&#xff08;升级AD9361&#xff09; 一、板卡概述 板卡由ADI ADRV9002Xilinx XC7Z020-CLG484芯片设计的整板&#xff0c;包含双路射频输入输出通道&#xff0c;支持千兆网络&#xff0c;RS232&#xff0c;触摸屏等接口&#xff…

SpringBoot 手动实现动态切换数据源 DynamicSource (上)

大家好&#xff0c;我是此林。 在实际开发中&#xff0c;经常可能遇到在一个SpringBoot Web应用中需要访问多个数据源的情况。 下面来介绍一下多数据源的使用场景、底层原理和手动实现。 一、 多数据源经典使用场景 场景一&#xff1a;业务复杂&#xff0c;数据量过大 1. 业务…

SQLServer定时备份到其它服务器上

环境 Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) SQL Server Management Studio 15.0.18384.0 SQL Server 管理对象 (SMO) 16.100.46367.54 Microsoft .NET Framework 4.0.30319.42000 本地操作系统&#xff08;SQLServer环境&#xff09; Windows 11 远程操作系统…

PaddleOCR模型ch_PP-OCRv3文本检测模型研究(二)颈部网络

上节研究了PaddleOCR文本检测v3模型的骨干网&#xff0c;本文接着研究其颈部网络。 文章目录 研究起点残注层颈部网络代码实验小结 研究起点 摘取开源yml配置文件&#xff0c;摘取网络架构Architecture中颈部网络的配置如下 Neck:name: RSEFPNout_channels: 96shortcut: True可…

IEEE T-RO 软体机器人手指状态估计实现两栖触觉传感

摘要&#xff1a;南方科技大学戴建生院士、林间院士、万芳老师、宋超阳老师团队近期在IEEE T-RO上发表了关于软体机器人手指在两栖环境中本体感知方法的论文。 近日&#xff0c;南方科技大学戴建生院士、林间院士、万芳老师、宋超阳老师团队在机器人顶刊IEEE T-RO上以《Propri…

AutoMQ x Iceberg SG Meetup: Table Topic 新特性统一流与分析首次公开

活动介绍 Apache Iceberg 已经成为数据湖表格式的事实标准&#xff0c;为存储在S3上的数据提供了统一的格式。随着 AWS 在 2024 年的 re:invent 大会上宣布支持 Iceberg Table 的 S3 Table 新特性&#xff0c;Iceberg 再一次受到全球开发者的关注和讨论。AutoMQ 是基于云优先理…

java-多线程的创造方式(自用笔记)

方式一&#xff1a;继承父类thread 1、定义一个子类&#xff0c;继承父类thread 2、重写父类的run方法 3、创建线程类的“对象” 4、启动线程 package week14;public class ThreadDemo {public static void main(String[] args) {//3、创建线程类的“对象”Thread t1 new…

【CSS in Depth 2 精译_071】11.4 思考字体颜色的对比效果 + 11.5 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…

MySQL ON DUPLICATE KEY UPDATE影响行数

目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …

ElasticSearch常见的索引_集群的备份与恢复方案

方案一&#xff1a;使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移&#xff0c;包括全量、增量备份和恢复。 方案二&#xff1a;通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移&#xff0c;或者跨集…

HarmonyOS:多线程并发-Worker

Worker主要作用是为应用程序提供一个多线程的运行环境&#xff0c;可满足应用程序在执行过程中与宿主线程分离&#xff0c;在后台线程中运行一个脚本进行耗时操作&#xff0c;极大避免类似于计算密集型或高延迟的任务阻塞宿主线程的运行。具体接口信息及使用方法详情请见Worker…