hjw_hjwkk 2022-08-02 18:41 采纳率: 100%
浏览 150
已结题

yolov5如何结合超绿法输出质心坐标

想将以下代码结合到yolov5-6.1中,并且显示出质心并输出质心坐标,应该如何改动。

import argparse
import imutils
import cv2
import numpy as np

# 构建命令行参数
# --image 要处理的图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", default="E:/yolov5/yolov5-6.1/VOCdevkit/VOC2007/JPEGImages/Charlock429.png", required=False,
                help="path to the input image")
args = vars(ap.parse_args())

# 加载图像,转换成int型,不然会导致数据溢出
image = cv2.imread("E:/yolov5/yolov5-6.1/VOCdevkit/VOC2007/JPEGImages/Charlock429.png")
img1 = np.array(image, dtype='int')
# 超绿灰度图
b, g, r = cv2.split(img1)
# ExG_sub = cv2.subtract(2*g,r)
# ExG = cv2.subtract(ExG_sub,b )
ExG = 2 * g - r - b
[m, n] = ExG.shape

for i in range(m):
    for j in range(n):
        if ExG[i, j] < 0:
            ExG[i, j] = 0
        elif ExG[i, j] > 255:
            ExG[i, j] = 255

ExG = np.array(ExG, dtype='uint8')  # 重新转换成uint8类型
thresh = cv2.threshold(ExG, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# 注意,在应用阈值化之后,形状是如何在黑色背景上表示为白色前景。
# 下一步是使用轮廓检测,找到这些白色区域的位置:
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
                        cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

# 遍历轮廓集
for c in cnts:
    # 计算轮廓区域的图像矩。 在计算机视觉和图像处理中,图像矩通常用于表征图像中对象的形状。这些力矩捕获了形状的基本统计特性,
    # 包括对象的面积,质心(即,对象的中心(x,y)坐标),方向以及其他所需的特性。
    M = cv2.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])
    # 在图像上绘制轮廓及质心
    cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
    cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)
    cv2.putText(image, "center", (cX - 20, cY - 20),
    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    # 展示图像
    cv2.imshow("Image", image)
    cv2.waitKey(0)

以下是上述代码生成的图像

img

  • 写回答

2条回答 默认 最新

  • 爱晚乏客游 2022-08-03 09:10
    关注

    你结合是要怎么个结合法?你的yolov5检测的什么东西?yolov5最后生成的是一个矩形框,你要把质心显示到矩形框上面去?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月11日
  • 已采纳回答 8月3日
  • 创建了问题 8月2日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵