当前位置: 首页 > article >正文

OpenCV函数及其应用

1. 梯度处理的Sobel算子函数


功能


Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像亮度的空间梯度。

参数


src:输入图像。
dst:输出图像。
ddepth:输出图像的深度。
dx:计算x方向梯度。
dy:计算y方向梯度。
ksize:Sobel内核的大小。


返回值


函数不返回值,但会修改dst参数。

import cv2
import numpy as np
 
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("img",img)
cv2.imshow('img_sobel',img_sobel)
cv2.imshow('img_sobel_2',img_sobel_2)
cv2.waitKey(0)

 2. 梯度处理Laplacian算子函数      

功能
Laplacian算子是一种二阶导数算子,用于检测图像中的区域的二阶导数,常用于边缘检测。

参数
src:输入图像。
dst:输出图像。
ddepth:输出图像的深度。
ksize:Laplacian内核的大小。
返回值
无。

应用
Laplacian算子适用于需要检测图像中区域的快速变化,如边缘和角点。

import cv2
import numpy as np

img=cv2.imread('./3.png')


img_l=cv2.Laplacian(img,-1,ksize=3)



cv2.imshow('img1',img_l)
cv2.waitKey(0)

3. Canny算子函数


功能
Canny算子是一种多级边缘检测算子,它通过高斯滤波、梯度计算、非极大值抑制和滞后阈值处理来检测图像中的边缘。

参数
image:输入图像。
edges:输出边缘图像。
threshold1:第一阈值。
threshold2:第二阈值。
返回值
无。

import cv2
img=cv2.imread('./5.png')

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

_,img_b=cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

#进行高斯滤波
img_blur=cv2.GaussianBlur(img_b,(3,3),3)

#边缘检测
img_canny=cv2.Canny(img_gray,50,150)

contours, hierarchy = cv2.findContours(img_canny, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, contours, -1, (0, 0, 255), 2)


cv2.imshow('img',img)
cv2.imshow('img_canny',img_canny)

cv2.waitKey(0)

4. findContours函数


功能
findContours函数用于在二值图像中查找轮廓。

参数
image:输入的二值图像。
contours:检测到的轮廓。
hierarchy:轮廓的层次结构。
返回值
轮廓的数量。

5. drawContours函数


功能
drawContours函数用于在图像上绘制轮廓。

参数
image:输入图像。
contours:要绘制的轮廓。
contourIdx:要绘制的轮廓索引。
color:轮廓的颜色。
返回值
会直接在输入的图像上进行绘制。

一般建议复制原图,在复制后的图片上绘制,方便和原图进行对比。

import cv2
img=cv2.imread('5.png')

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#二值化
_,img_b=cv2.threshold(img_gray,120,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)



#寻找轮廓
contours,hierarchy=cv2.findContours(
    img_b,
    cv2.RETR_LIST,#查询轮廓的方式
    cv2.CHAIN_APPROX_SIMPLE # 保存轮廓点坐标的方式
                    )
# 绘制轮廓
img_copy=img.copy()
img_draw=cv2.drawContours(img_copy,     #要绘制轮廓的图像
                          contours,     # 轮廓的顶点
                          -1,             # 轮廓列表的索引值
                          (0,0,255),   #
                          3           #
                          )

cv2.imshow('img',img)
cv2.imshow('img_d',img_draw)

cv2.waitKey(0)


http://www.kler.cn/a/443988.html

相关文章:

  • CNN回归-卷积神经网络(Convolutional Neural Network)
  • Android 蓝牙Bluedroid线程池设计思路介绍
  • 页面无滚动条,里面div各自有滚动条
  • Nginx - 负载均衡及其配置(Balance)
  • PHP 微信棋牌开发全解析:高级教程
  • MySQL数据库下载及安装教程
  • 大模型与呼叫中心结合的呼入机器人系统
  • jquery虚拟键盘插件jqkeyboard
  • 红队规范:减少工具上传,善用系统自带程序
  • CSS学习第二天
  • golang结构体转map
  • dify.ai和fastgpt,各有什么优缺点,有什么区别
  • 【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
  • 使用Python脚本进行编写批量根据源IP进行查询的语句用于态势感知攻击行为的搜索
  • 省略内容在句子中间
  • 安装配置Ubuntu 22.04
  • Binder 大小
  • 线性规划中的几种逻辑表达式
  • C#核心(18)面向对象多态vob
  • LabVIEW中的“Synchronize with Other Application Instances“
  • uniapp blob格式转换为video .mp4文件使用ffmpeg工具
  • DePIN潜力项目Spheron解读:激活闲置硬件,赋能Web3与AI
  • rust使用log与env_logger两个crate实现同时向控制台和文件输出日志。并在隔日自动创建新日志文件。
  • IEC 101/104 中为什么我们需要单点和双点信号
  • 01、NodeJS学习笔记,第一节:Node.js初识与内置模块
  • 如果 MySQL 的自增 ID 用完了,怎么解决?