这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【M5CoreS3测评】基于openCV实现物体轮廓识别

共1条 1/1 1 跳转至

【M5CoreS3测评】基于openCV实现物体轮廓识别

助工
2025-10-12 11:12:09     打赏

该测试基于上一次的网络图传,可以参见我的上一篇帖子【M5CoreS3测评】网络图传-电子产品世界论坛

在开始测试之前,需要在电脑上安装numpy、opencv-python以及opencv-contrib-python库

完成库的安装后,安装网络图传的步骤,利用M5CoreS3的屏幕显示得到摄像头画面的网址

在电脑端,编写Python代码如下,其中url地址为M5CoreS3屏幕显示的网址

其运行步骤为:从url获取图像并进行预处理 -> 基于openCV中相关算法获取边缘轮廓 -> 将获取结果展示在窗口

import cv2
import urllib.request
import numpy as np

url = 'http://192.168.1.15:80/capture'  # M5CoreS3的IP地址

cv2.namedWindow("live transmission", cv2.WINDOW_AUTOSIZE)  # 创建一个窗口用于显示实时图像

while True:
    img_resp = urllib.request.urlopen(url)  # 从URL获取图像数据
    imgnp = np.array(bytearray(img_resp.read()), dtype=np.uint8)  # 将图像数据转换为NumPy数组
    img = cv2.imdecode(imgnp, -1)  # 解码JPEG图像数据

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 将图像转换为灰度图像
    canny = cv2.Canny(cv2.GaussianBlur(gray, (11, 11), 0), 30, 150, 3)  # 使用Canny算法进行边缘检测
    dilated = cv2.dilate(canny, (1, 1), iterations=2)  # 对边缘图像进行膨胀操作
    (contours, _) = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)  # 查找轮廓
    k = img
    cv2.drawContours(k, contours, -1, (0, 255, 0), 2)  # 在原始图像上绘制轮廓

    cv2.imshow("mit contour", canny)  # 显示边缘检测结果图像

    cv2.imshow("live transmission", img)  # 显示实时图像
 
    # 按下 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

检测效果如下,可以看到检测出了我的手

屏幕截图 2025-10-12 110112.png

边缘检测采用的是Canny算法,其中cv2.Canny的传参如下,返回值是一个包含边缘信息的二值图像

cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

参数说明

image:输入图像,必须为单通道灰度图像

threshold1:第一个阈值,用于边缘检测

threshold2:第二个阈值,用于边缘检测

edges:输出的边缘图像

apertureSize:Sobel算子的大小,可选值为3、5、7,默认值为3

L2gradient:是否使用L2范数计算梯度大小,可选值为True和False,默认值为False

如果只要检测最明显的物体,可以适当增大threshold2,这样检测到的就是和环境对比度大的物体




关键词: M5CoreS3     openCV     物体轮廓识别    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]