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.rhkb.cn/news/489218.html

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

相关文章

MySQL有哪些高可用方案?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助&#xff1b; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…

鸿蒙项目云捐助第二讲鸿蒙图文互动基本程序实现

鸿蒙项目云捐助第二讲鸿蒙图文互动基本程序实现 结合第一讲建立的“Hello World”程序&#xff0c;得到如下图所示的界面。 这里的“Hello World”是通过“Priview”显示出来的。在这个界面中进行开发的前奏曲&#xff0c;可以通过点击更换图片的案例来体会一下鸿蒙Next的开发…

厦门凯酷全科技有限公司正规吗靠谱吗?

随着短视频和直播电商的迅猛发展&#xff0c;越来越多的企业开始将目光投向抖音这一平台。作为国内领先的短视频社交平台&#xff0c;抖音凭借其庞大的用户基础和强大的算法推荐系统&#xff0c;成为众多品牌拓展市场、提升销售的重要渠道。厦门凯酷全科技有限公司&#xff08;…

计算机网络从诞生之初到至今的发展历程

前言 "上网"&#xff0c;相信大家对这个动词已经不再陌生&#xff0c;网 通常指的是网络&#xff1b;在 2024 年的今天&#xff0c;网络已经渗透到了每个人的生活中&#xff0c;成为其不可或缺的一部分&#xff1b;你此时此刻在看到我的博客&#xff0c;就是通过网络…

django——admin后台管理1

一、admin后台管理 访问url进入&#xff1a; http://127.0.0.1:8000/admin ​ 创建超级管理用户 终端输入以下命令&#xff1a; python manage.py createsuperuser (py36_pingping) E:\django学习\day03-django入门\demo>python manage.py createsuperuser Username: mo…

如何保证数据库和缓存双写一致性?

数据库和缓存&#xff08;redis&#xff09;双写数据一致性问题再高并发的场景下&#xff0c;是一个很严重的问题&#xff0c;无论在工作中&#xff0c;还是面试&#xff0c;遇到的概率非常大&#xff0c;这里就聊一聊目前的常见解决方案以及最优方案。 常见方案 缓存的主要目…

Java基础知识(四) -- 面向对象(上)

1.概述 Java语言是一种面向对象的程序设计语言&#xff0c;而面向对象思想(OOP)是一种程序设计思想&#xff0c;在面向对象思想的指引下&#xff0c;使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物&#xff0c;每种事物都具备自己的属性和行为。 面向对象思…

【数据结构与算法】Java描述:学数据结构与算法你需要预备的知识点!!!

这篇文章主要介绍 什么是数据结构&#xff0c;算法的时间复杂度&#xff0c;空间复杂度计算&#xff0c;包装类的装箱拆箱&#xff0c; 泛型语法&#xff0c;以及擦除机制。 目录 一、什么是数据结构 二、时间复杂度&#xff0c;空间复杂度 2.1 时间复杂度&#xff0c;空间…

传输层7——TCP拥塞控制(重点!!!)

目录 一、认识拥塞控制 1、什么叫做拥塞&#xff1f; 2、拥塞的特点 3、流量控制 VS 拥塞控制 二、TCP如何防止拥塞&#xff1f; 1、慢开始 2、拥塞避免 3、3重复确认 和 快重传算法 4、快恢复算法 5、总结 三、主动队列管理AQM 1、技术背景 2、AQM思 想和实现策略…

[64]最小路径和⭐

[64]最小路径和⭐ 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者向右移动一步。 示例输入 示例 1&#xff1a; 输入&#xff1a;grid …

AI技术架构:从基础设施到应用

人工智能&#xff08;AI&#xff09;的发展&#xff0c;正以前所未有的速度重塑我们的世界。了解AI技术架构&#xff0c;不仅能帮助我们看懂 AI 的底层逻辑&#xff0c;还能掌握其对各行业变革的潜力与方向。 一、基础设施层&#xff1a;AI 技术的坚实地基 基础设施层是 AI 技…

每日计划-1213

1. 完成 SQL2 查询多列 https://www.nowcoder.com/exam/oj?page1tabSQL%E7%AF%87topicId199 2. 八股部分 1) C 中面向对象编程如何实现数据隐藏&#xff1f; 在c中&#xff0c;可以将数据成员声明为私有或受保护&#xff0c;并提供公有的成员函数来访问和修改这些数据成员&am…

【ADS射频电路设计教程】1. ADS基本操作

下面介绍ADS中主要仿真器的使用 1. 直流仿真 直流仿真器在控制面板的simulator-dc 直流仿真器 但是ADS自带有很多仿真器&#xff0c;可以直接来调用 选用晶体管电流扫描的模板 就可以输出模板 然后调入晶体管模型 然后要设置扫描的电压&#xff0c;选择dc仿真器对vds进行扫描…

EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用

随着信息技术的快速发展&#xff0c;安防视频监控系统在公共安全领域的应用变得越来越广泛。传统的视频监控系统多依赖于中心服务器进行视频流的集中处理和分发&#xff0c;这不仅增加了网络带宽的负担&#xff0c;还可能成为系统性能瓶颈。为了解决这些问题&#xff0c;P2P&am…

CTFHub 命令注入-综合练习(学习记录)

综合过滤练习 命令分隔符的绕过姿势 ; %0a %0d & 那我们使用%0a试试&#xff0c;发现ls命令被成功执行 /?ip127.0.0.1%0als 发现一个名为flag_is_here的文件夹和index.php的文件&#xff0c;那么我们还是使用cd命令进入到文件夹下 http://challenge-438c1c1fb670566b.sa…

美团2024年秋招第一场笔试【前端移动端】

美团2024年秋招第一场笔试【前端&移动端】 2024/12/12 1.在一个长度为28的数组中删除第5个元素时&#xff08;元素序号&#xff1a;1~28&#xff09;&#xff0c;需要向前移动&#xff08;23&#xff09;个元素。 2.如下图一个树型结构&#xff0c;其结点E在树的中序遍历…

2025周易算命网站搭建详细方法+源码选择php环境的配置

以下是一个详细的搭建教程&#xff0c;包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux&#xff08;推荐使用Ubuntu或CentOS&#xff09;Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x&#xff08;确保小于8.0&#xff09; 1.2 安…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景&#xff1a; TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候&#xff0c;有的采购申请的品名、规格、品牌为空 原因分析&#xff1a; 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下&#xff0c;只需修…

人员离岗监测摄像机智能人员睡岗、逃岗监测 Python 语言结合 OpenCV

在安全生产领域&#xff0c;人员的在岗状态直接关系到生产流程的顺利进行和工作环境的安全稳定。人员离岗监测摄像机的出现&#xff0c;为智能人员睡岗、逃岗监测提供了高效精准的解决方案&#xff0c;而其中的核心技术如AI识别睡岗脱岗以及相关的算法盒子和常见的安全生产AI算…

Linux之条件变量,信号量,生产者消费者模型

Linux之条件变量&#xff0c;信号量&#xff0c;生产消费者模型&#xff0c;日志以及线程池 一.条件变量1.1条件变量的概念1.2条件变量的接口 二.信号量2.1信号量的重新认识2.2信号量的接口 三.生产者消费者模型3.1生产者消费者模型的概念3.2基于阻塞队列的生产者消费者模型3.3…