数字图像处理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时,文本的原点是在左下角,否则(默认)在左上角。
相关推荐
mwq301238 小时前
Transformer : 深度神经网络中的残差连接 (Residual Connection)
人工智能
信田君95278 小时前
瑞莎星瑞(Radxa Orion O6) 基于 Android OS 使用 NPU的图片模糊查找APP 开发
android·人工智能·深度学习·神经网络
StarPrayers.8 小时前
卷积神经网络(CNN)入门实践及Sequential 容器封装
人工智能·pytorch·神经网络·cnn
周末程序猿8 小时前
谈谈上下文工程(Context Engineering)
人工智能
一水鉴天8 小时前
整体设计 逻辑系统程序 之29 拼语言+ CNN 框架核心定位、三阶段程序与三种交换模式配套的方案讨论 之2
人工智能·神经网络·cnn
海森大数据8 小时前
AI破解数学界遗忘谜题:GPT-5重新发现尘封二十年的埃尔德什问题解法
人工智能·gpt
望获linux9 小时前
【实时Linux实战系列】Linux 内核的实时组调度(Real-Time Group Scheduling)
java·linux·服务器·前端·数据库·人工智能·深度学习
Dev7z9 小时前
河南特色农产品识别系统:让AI守护“中原味道”
人工智能
万俟淋曦9 小时前
【论文速递】2025年第28周(Jul-06-12)(Robotics/Embodied AI/LLM)
人工智能·ai·机器人·大模型·论文·robotics·具身智能