数字图像处理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}")

第一个参数是counters[i]

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

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时,文本的原点是在左下角,否则(默认)在左上角。
相关推荐
2501_9247314715 分钟前
城市路口识别准确率↑31%!陌讯时空建模算法在交通拥堵识别中的突破
人工智能·算法·目标检测·计算机视觉·目标跟踪
m0_616330451 小时前
Day 40 训练和测试的规范写法
人工智能·深度学习·机器学习
数据饕餮2 小时前
Pytorch深度学习框架实战教程-番外篇05-Pytorch全连接层概念定义、工作原理和作用
人工智能·pytorch·深度学习
FIT2CLOUD飞致云2 小时前
MaxKB+合合信息TextIn:通过API实现PDF扫描件的文档审核
人工智能·开源
算家计算3 小时前
OpenAI 全新开源模型 GPT-OSS-20B本地部署教程:16GB显存跑透128K上下文
人工智能·开源·openai
墨尘游子3 小时前
2- Python 网络爬虫 — 如何精准提取网页数据?XPath、Beautiful Soup、pyquery 与 parsel 实战指南
人工智能·网络爬虫·知识图谱·机器翻译
大海的John3 小时前
FinQ4Cn: 基于 MCP 协议的中国 A 股量化分析
人工智能
霍格沃兹测试开发学社测试人社区3 小时前
Dify入门指南(2):5 分钟部署 Dify:云服务 vs 本地 Docker
人工智能·低代码
西猫雷婶3 小时前
scikit-learn/sklearn学习|岭回归解读
开发语言·人工智能·机器学习·支持向量机·回归·scikit-learn·sklearn