数字图像处理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时,文本的原点是在左下角,否则(默认)在左上角。
相关推荐
悟纤4 分钟前
Suno 电子舞曲创作指南:102 个实用 Prompt 精选 | Suno高级篇 | 第20篇
人工智能·prompt·suno·suno ai·suno api·ai music
北京耐用通信7 分钟前
石油化工车间的“通讯救星”:耐达讯自动化Profibus总线光纤中继器有多实用?
人工智能·科技·物联网·自动化·信息与通信
檐下翻书17318 分钟前
具身智能:AI在物理环境中的感知-行动闭环
人工智能
十铭忘20 分钟前
动作识别10——基于骨骼点的动作识别PoseC3D
人工智能·深度学习·计算机视觉
用针戳左手中指指头22 分钟前
AI小白搞AI之目标检测:王者荣耀画面识别
人工智能·python·yolo·目标检测·王者荣耀
码农三叔22 分钟前
(9-2-02)自动驾驶中基于概率采样的路径规划:基于Gazebo仿真的路径规划系统(2)
人工智能·机器学习·机器人·自动驾驶·rrt
Fasda1234531 分钟前
使用VFNet模型实现车轮缺陷检测与分类_改进模型_r50-mdconv-c3-c5_fpn_ms-2x_coco
人工智能·分类·数据挖掘
大学生毕业题目31 分钟前
毕业项目推荐:105-基于yolov8/yolov5/yolo11的烟草等级检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·烟草等级
葫三生34 分钟前
三生原理范畴语法表明中国哲学可为算法母语
人工智能·深度学习·算法·transformer
机器鱼44 分钟前
YOLO26目标检测与实例分割ONNXRUNTIME推理
人工智能·目标检测·计算机视觉