数字图像处理4

预处理------ROI------形态学处理

形态学处理

形态学变化只能在二值图上处理

1.腐蚀Erode

对kernel映射的区域做与操作,包括自己在内如果有0则中间赋值成0

2.膨胀Dilate

对kernel映射的区域做或操作,包括自己在内如果有1则中间赋值成1

3.其他操作

开操作:先腐蚀后膨胀(消除小区域并分离物体而不影响原来图像)

闭操作:先膨胀后腐蚀(填充物体内部的小孔,除去小黑点而不影响原来图像)

形态学梯度运算:膨胀和腐蚀的图像相减

顶帽:原图像-开操作后图像(获取噪声或者边缘信息)

顶帽:原图像-闭操作后图像

轮廓操作

Canny轮廓提取

python 复制代码
im_for_read=R"D:\AAAproject\PYproject\EXPERuse\zaosheng.jpg"
img=cv2.imread(im_for_read,-1)
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray_image, threshold1=150, threshold2=200)
cv2.imshow("edges", edges)
cv2.waitKey(0)

cv2.findContours()

python 复制代码
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

提取出来的轮廓需要被数字化的,所以要查找轮廓在哪些地方,

第一个参数是已经被提取轮廓后的图像

第二个参数是提取模式

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

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

cv2.RETR_LIST: 检索所有轮廓但不分层次结构。

第三个参数是轮廓近似方法

cv2.CHAIN_APPROX_SIMPLE: 压缩水平、垂直和对角方向的元素,只保留端点。例如,一个直立的矩形轮廓只需存储四个点。

cv2.CHAIN_APPROX_NONE: 存储所有的轮廓点。

cv2.drawContours()

python 复制代码
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)

那么在提取完轮廓之后需要进行加强,

第一个参数是要被画轮廓的图像

第二个参数是cv2.findContours()找到的轮廓

第三个参数是要绘制的轮廓的索引,-1则全绘制

第四个参数是绘制轮廓的颜色,用brg表示

第五个参数是轮值轮廓线的厚度(-1是填充)

计算轮廓的周长和面积

python 复制代码
# 假设 contours 是 cv2.findContours() 找到的轮廓列表
for cnt in contours:
    # 计算每个轮廓的周长 (假设是闭合的)
    perimeter = cv2.arcLength(cnt, True)
    print(f"轮廓周长: {perimeter}")

第一个参数是countersi

第二个参数是轮廓是否闭合

python 复制代码
# 假设 contours 是 cv2.findContours() 找到的轮廓列表
for cnt in contours:
    # 计算每个轮廓的面积
    area = cv2.contourArea(cnt)
    print(f"轮廓面积: {area}")

面积第二个参数可选是否返回带符号的面积值

外接形拟合

外接矩形

python 复制代码
x, y, w, h = cv2.boundingRect(contour)

可用来判断图形的大致形状

还有最小外接矩形

python 复制代码
rotated_rect = cv2.minAreaRect(contour)

返回值是一个center坐标,width,higth,angle

外接圆形

python 复制代码
(center, radius) = cv2.minEnclosingCircle(contour)

可以用来求中心坐标

其他轮廓形状

凸包,多边形

绘图操作

画线 画圆 画多边形(可直接放入最适多边形输出)

python 复制代码
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
  • img: 要在其上绘图的图像。
  • pt1: 线条起点的坐标 (x, y)。
  • pt2: 线条终点的坐标 (x, y)。
  • color: 线条的颜色(对于RGB图像,使用BGR格式,如 (255, 0, 0) 表示蓝色)。
  • thickness: 可选参数,线条的粗细(默认为1)
python 复制代码
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])

画文本

  • img: 要在其上绘图的图像。
  • center: 圆心位置的坐标 (x, y)。
  • radius: 圆的半径。
  • color: 圆的颜色(对于RGB图像,使用BGR格式,如 (0, 255, 0) 表示绿色)。
  • thickness: 可选参数,线条的粗细。若为负值(如 cv2.FILLED),则填充整个形状。
python 复制代码
cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
  • img: 要在其上添加文本的图像。
  • text: 要显示的字符串。
  • org: 文本左下角的坐标 (x, y)。
  • fontFace: 字体类型(如 cv2.FONT_HERSHEY_SIMPLEX, cv2.FONT_HERSHEY_COMPLEX 等)。
  • fontScale: 字体大小比例因子。如果值大于1,则字体放大;小于1则缩小。
  • color: 文本的颜色(对于RGB图像,使用BGR格式,如 (255, 0, 0) 表示蓝色)。
  • thickness: 可选参数,线条的粗细(默认为1)。
  • lineType: 可选参数,与画线时相同,可选择 cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA (抗锯齿线条)。
  • bottomLeftOrigin: 可选参数,当值为True时,文本的原点是在左下角,否则(默认)在左上角。
相关推荐
hongyucai14 分钟前
torch具身常用算子
人工智能·深度学习
林泽毅26 分钟前
PyTRIO快速入门(一):概念、推理与训练
人工智能·python·深度学习·机器学习·语言模型
美团技术团队32 分钟前
让AI离开温室,走向动态世界:MineExplorer揭示顶级多模态大模型被忽视的能力断层
人工智能
Litluecat41 分钟前
2026年7月23日科技热点新闻
人工智能·科技·新闻·每日·速览
美团技术团队42 分钟前
下一代搜索智能体评测基准!美团开源LoHoSearch,用知识图谱校准AI能力认知
人工智能
武子康44 分钟前
Token 单价更低,Agent 任务为什么反而更贵:4 层成本口径 + 最小事件账本 + 3 个决策问题
人工智能·agent·ai编程
叫我Paul就好1 小时前
RAG 入门到精通 - 构建评估系统
人工智能·rag
学术小李1 小时前
基于Pytorch,如何用CUDA自己写算子?(一)
人工智能·pytorch·python
九硕智慧建筑一体化厂家1 小时前
直流照明降损节能,智慧路灯点亮智慧城市脉络
人工智能·智慧城市
秦先生在广东1 小时前
Block Buzz:用 Nostr 协议把 AI Agent 变成真正的队友,而非自动化幽灵
人工智能