Python轮廓追踪【OpenCV形态学操作】

文章目录

概要

一些理论知识

OpenCV形态学操作理论1
OpenCV形态学操作理论2
OpenCV轮廓操作|轮廓类似详解

代码

代码如下,可以直接运行

python 复制代码
import cv2 as cv

# 定义结构元素
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
# print kernel

capture = cv.VideoCapture(0)
print (capture.isOpened())
ok, frame = capture.read()
lower_b = (65, 43, 46)
upper_b = (110, 255, 255)

height, width = frame.shape[0:2]
screen_center = width / 2
offset = 50

while ok:
    # 将图像转成HSV颜色空间
    hsv_frame = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # 基于颜色的物体提取
    mask = cv.inRange(hsv_frame, lower_b, upper_b)
    mask2 = cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)
    mask3 = cv.morphologyEx(mask2, cv.MORPH_CLOSE, kernel)

    # 找出面积最大的区域
    contours,_ = cv.findContours(mask3, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

    maxArea = 0
    maxIndex = 0
    for i, c in enumerate(contours):
        area = cv.contourArea(c)
    if area > maxArea:
        maxArea = area
    maxIndex = i
    # 绘制
    cv.drawContours(frame, contours, maxIndex, (255, 255, 0), 2)
    # 获取外切矩形
    x, y, w, h = cv.boundingRect(contours[maxIndex])
    cv.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
    # 获取中心像素点
    center_x = int(x + w / 2)
    center_y = int(y + h / 2)
    cv.circle(frame, (center_x, center_y), 5, (0, 0, 255), -1)

    # 简单的打印反馈数据,之后补充运动控制
    if center_x < screen_center - offset:
        print ("turn left")
    elif screen_center - offset <= center_x <= screen_center + offset:
        print ("keep")
    elif center_x > screen_center + offset:
        print ("turn right")

    cv.imshow("mask4", mask3)
    cv.imshow("frame", frame)
    cv.waitKey(1)
    ok, frame = capture.read()

运行结果



相关推荐
Yunzenn1 分钟前
深度解析字节前沿研究-Cola DLM第 04 章:Cola DLM 架构全景 —— 三层解耦的设计哲学
java·linux·python·深度学习·面试·github·transformer
冬奇Lab3 分钟前
Agent系列(三):Plan-and-Solve——先想清楚,再动手
人工智能·llm·agent
冬奇Lab6 分钟前
每日一个开源项目 #110:ai-engineering-from-scratch - 从零构建 AI 工程全栈能力
人工智能·深度学习·llm
夜郎king7 分钟前
基于 Trae Solo 的 Ant 遗留项目编译方案 —— 以 BaseformEpanet 为例
人工智能·trae solo·水力模型·java水力模型编译
测试员周周9 分钟前
【Appium 系列】第20节-测试项目结构设计 — 从脚本到工程
人工智能·数据挖掘·回归·单元测试·appium·测试用例·测试覆盖率
还是叫明12 分钟前
C#使用YOLO26进行图像识别(目标检测)
opencv·yolo·目标检测·c#
秣厉科技13 分钟前
【番外】04:Python 和 LabVIEW 对接 DeepSeek API
python·labview·deepseek
IT_陈寒14 分钟前
SpringBoot自动配置偷偷给我埋了个坑
前端·人工智能·后端
一切皆是因缘际会14 分钟前
AI 从 “模仿智能” 到 “重构世界” 的范式跃迁
大数据·人工智能·深度学习·重构·架构
小新同学^O^15 分钟前
简单学习 --> 限流和熔断
数据库·python·学习