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,一经查实,立即删除!

相关文章

PostgreSQL JSON/JSONB 查询与操作指南

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作&#xff0c;适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值&#xff0c;结果为 JSON 格式。 SELECT {"a": {"b": 1…

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

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

2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程

2024年山西省第十八届职业院校技能大赛 &#xff08;高职组&#xff09;“信息安全管理与评估”赛项规程 一、赛项名称 赛项名称&#xff1a;信息安全管理与评估 英文名称&#xff1a;Information Security Management and Evaluation 赛项组别&#xff1a;高职教师组 赛项归属…

modbus学习笔记

ModBus协议的两大变体&#xff1a;ModBus RTU 与 ModBus TCP Modbus报文头(MBAP)帧结构&#xff08;PDU&#xff09;7个字节 功能码&#xff1a;1个字节 注意&#xff1a;据说RTU和TCP的差距就是效验码 Modbus协议最基本的通信单位是帧&#xff0c;整个Modbus帧又被称之为应用…

Flutter 桌面端串口配置

前言 我使用flutter_libserialport包在macOS中实现串口通信的功能&#xff0c;可以实现数据收发&#xff0c;但是收到的内容是乱码。这种情况一般都是由于波特率和硬件设备不一致导致的。 配置串口配置 1.打开串口读写 import package:flutter_libserialport/flutter_libser…

JavaScript逆向时,常用的11个hook

提示:记录工作中遇到的需求及解决办法 文章目录 前言01、dom操作02、Cookie操作03、事件监听操作04、AJAX拦截操作05、函数替换操作06、Header操作07、URL操作08、JSON.stringify操作09、JSON.parse操作10、eval操作11、Function操作前言 在逆向分析JavaScript代码时,开发者…

什么是EDI 896?

EDI 896 报文即产品尺寸维护报告&#xff08;Product Dimension Maintenance&#xff09;&#xff0c;是一种常用于零售和供应链管理领域的EDI&#xff08;电子数据交换&#xff09;事务集。它的主要功能是用来传递或更新有关产品尺寸、属性和分类等信息。此消息通常在以下场景…

PPO系列2 - GAE优势函数

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

subList与原始List相互影响

在 Java 中&#xff0c;List#subList(int fromIndex, int toIndex) 方法返回的是原始列表的一个视图&#xff08;view&#xff09;&#xff0c;而不是一个独立的副本。这意味着对 subList 的任何修改都会反映到原始列表中&#xff0c;反之亦然。这可能会导致意外的行为&#xf…

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 …

一、使用 mdadm 工具在 Ubuntu 上创建 RAID 1(镜像)

在 Ubuntu 上创建 RAID 1&#xff08;镜像&#xff09;可以使用 mdadm 工具。以下是详细的步骤&#xff0c;包括安装必要的工具、创建 RAID 阵列、格式化并挂载 RAID 设备。 步骤一&#xff1a;安装 mdadm 首先确保你已经安装了 mdadm 包&#xff0c;这是管理软件 RAID 所需的…

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;为林业监控提供了一个绿色、智能、高效的解决方案。它不仅能够实现对森林资源的实时监控&#…

硬链接方式重建mysql大表

硬链接方式重建mysql大表 操作步骤 选择数据库 select datadir; 进入数据文件目录 cd /data/mysql/mydata/testdb 创建硬连接 ln test_trans_msg_xx.ibd test_service_trans_msg_xx.ibd.bak ll test_trans_msg_xx* 进库删除表 DROP TABLE test_trans_msg_xx; 重建表 CREATE T…

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…

grpc的负载均衡

grpc的负载均衡分为client-side load balance和server-side load balance。 所谓的“客户端负载均衡”是指主调方调用被调方的时候&#xff0c;在grpc.DialContext里需要指定grpc.WithDefaultServiceConfig&#xff0c;这个DefaultServiceConfig默认是用pick-first策略。也支持…

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

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