OpenCV函数及其应用

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

功能

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

参数

src:输入图像。

dst:输出图像。

ddepth:输出图像的深度。

dx:计算x方向梯度。

dy:计算y方向梯度。

ksize:Sobel内核的大小。

返回值

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

python 复制代码
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算子适用于需要检测图像中区域的快速变化,如边缘和角点。

python 复制代码
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:第二阈值。

返回值

无。

python 复制代码
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:轮廓的颜色。

返回值

会直接在输入的图像上进行绘制。

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

python 复制代码
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)
相关推荐
Funny_AI_LAB43 分钟前
OpenAI DevDay 2025:ChatGPT 进化为平台,开启 AI 应用新纪元
人工智能·ai·语言模型·chatgpt
深瞳智检1 小时前
YOLO算法原理详解系列 第002期-YOLOv2 算法原理详解
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
深眸财经2 小时前
机器人再冲港交所,优艾智合能否破行业困局?
人工智能·机器人
小宁爱Python2 小时前
从零搭建 RAG 智能问答系统1:基于 LlamaIndex 与 Chainlit实现最简单的聊天助手
人工智能·后端·python
新知图书3 小时前
Encoder-Decoder架构的模型简介
人工智能·架构·ai agent·智能体·大模型应用开发·大模型应用
大模型真好玩3 小时前
低代码Agent开发框架使用指南(一)—主流开发框架对比介绍
人工智能·低代码·agent
tzc_fly3 小时前
AI作为操作系统已经不能阻挡了,尽管它还没来
人工智能·chatgpt
PKNLP3 小时前
深度学习之神经网络1(Neural Network)
人工智能·深度学习·神经网络
文火冰糖的硅基工坊4 小时前
《投资-99》价值投资者的认知升级与交易规则重构 - 什么是周期性股票?有哪些周期性股票?不同周期性股票的周期多少?周期性股票的买入和卖出的特点?
大数据·人工智能·重构·架构·投资·投机
Elastic 中国社区官方博客4 小时前
Elasticsearch:使用推理端点及语义搜索演示
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索