opencv-python实战---物体长度尺寸测量

这篇具有很好参考价值的文章主要介绍了opencv-python实战---物体长度尺寸测量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文的主要算法实现思路:找一个最小面积的矩形提供长宽由此推算出其他物体的长度

博主只写了测量物体最左最右的长度,只能测量矩形。

如图opencv 长度,opencv,人工智能,计算机视觉

 最左边的为参照物,然后测量上下两个物体的最左和最右长度。

1,相关库

opencv-python  == 4.7.0.72

numpy == 1.24.2

 2,参数设置

if __name__ == '__main__':
    minArea = 200
    img = cv2.imread(r'D:\1\tp\7.jpg')
    img = cv2.resize(img, (0, 0), None, 0.5, 0.5)
    findDis1(img,W=50,H=50)

minArea为图片中最小的识别面积,小于这个面积将不会给识别

findDis1里面的W,H修改为自己的参照物长,宽

3,提取物体轮廓信息

def getContours(img):
    imgG = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    imgBlur = cv2.GaussianBlur(imgG, (5, 5), 1)
    imgCanny = cv2.Canny(imgBlur, 100, 100)
    img2 = img.copy()
    # kernel = np.ones((5, 5))
    contours, hiearchy = cv2.findContours(imgCanny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    finalCountours = []
    for i in contours:
        area = cv2.contourArea(i)
        if area > minArea:
            # 计算轮廓的周长,true表示轮廓为封闭
            peri = cv2.arcLength(i, True)
            appprox = cv2.approxPolyDP(i, 0.02 * peri, True)
            bbox = cv2.boundingRect(appprox)
            if filter > 0:
                # if (len(appprox)) == filter:
                finalCountours.append([len(appprox), area, appprox, bbox, i])
            else:
                finalCountours.append([len(appprox), area, appprox, bbox, i])
    # 对第二个数值面积进行排序,为升序,找出轮廓的最大值
    finalCountours = sorted(finalCountours, key=lambda x: x[1], reverse=True)
    for con in finalCountours:
        cv2.drawContours(img, con[4], -1, (0, 0, 255), 4)
    return img, finalCountours, img2

前面先对img进行预处理(对输入的图像进行灰度化、高斯模糊和边缘检测操作)

contours,hiearchy=cv2.findContours(imgCanny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

 这个方法适用于opencv4版本的,如过这里报错的话可能是你的版本跟我不一样,如果是opencv3版本的话需要在前面加个参数

4,找到最小面积的轮廓并定位四个点


def reorder(myPoints):
    myPointsNew = np.zeros_like(myPoints)
    myPoints = myPoints.reshape((4, 2))
    add = myPoints.sum(1)
    myPointsNew[0] = myPoints[np.argmin(add)]
    myPointsNew[3] = myPoints[np.argmax(add)]
    diff = np.diff(myPoints, axis=1)
    myPointsNew[1] = myPoints[np.argmin(diff)]
    myPointsNew[2] = myPoints[np.argmax(diff)]
    return myPointsNew

这段代码是返回四个顶点

5,主要计算长度代码解释

 for i in cons3:
            # print(i[1])
            List.append(i[1])
        Min = min(List)
        Min = int(Min)
        inde = List.index(Min)
        nPoints = reorder(cons3[inde][2])
        xw = nPoints[1][0][0] - nPoints[0][0][0]
        xh = nPoints[2][0][1] - nPoints[0][0][1]
        a = xw / W
        a1 = xh / H
        for i in cons3:
            List = []
            for i1 in i[2]:
                List.append([i1[0][0], i1[0][1]])
            Bubbl(List)
            seat = int(len(List) - 2)
            cv2.arrowedLine(img2,List[0], List[1],(255, 0, 255), 2, 8, 0, 0.05)
            cv2.arrowedLine(img2, List[seat], List[seat + 1],(255, 0, 255), 2, 8, 0, 0.05)
            xscd = findDis(List[0],List[1])
            CD = xscd / a
            CD = round(CD,1)
            x, y, w, h = i[3]
            cv2.putText(img2, '{}cm'.format(CD), (x + w, y), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1,
                        (255, 0, 255), 1)
            xscd1 = findDis(List[seat], List[seat+1])
            CD1 = xscd1 /a
            CD1 =round(CD1,1)
            cv2.putText(img2, '{}cm'.format(CD1), (x , y + h // 2), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1,
                        (255, 0, 255), 1)
        cv2.imshow('img2', img2)
        cv2.waitKey(0)

第一个for是找出最小矩形对应的长度像素值,与我们给出的实际长度做出一个参数a

第二个for是便利每一个矩形图像,并获得最左,最右两个边的长度以及位置信息,并用opencv打印上去主要信息

6,实际效果如图:

opencv 长度,opencv,人工智能,计算机视觉

7,完整代码可在github上获取

github:https://github.com/weizhi8/opencv.git

地址失效可邮件私聊:2275716724@qq.com文章来源地址https://www.toymoban.com/news/detail-649008.html

到了这里,关于opencv-python实战---物体长度尺寸测量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-python3 | cv2.findContours()检测图像中物体轮廓

    轮廓可以简单地理解为连接所有连续点(沿物体边界)的曲线,这些点通常具有相同的颜色或强度。 轮廓在图像分析中具有重要意义,是物体形状分析和对象检测和识别的有用工具,是理解图像语义信息的重要依据。 通常,为了提高物体轮廓检测的准确率,首先要将彩色图

    2024年02月05日
    浏览(50)
  • 【电赛训练】非接触物体尺寸形态测量 2020年电赛G题

    一、题目要求 具体内容详见非接触物体尺寸形态测量(G 题)——行走的皮卡丘 设计并制作一个非接触式物体形状和尺寸自动测量装置,装置的布置图如图 1所示,测量装置放置在图中所示的测量装置区内,被测目标放置在图中被测目标放置区内,装置能测量被测目标的形状

    2024年02月16日
    浏览(56)
  • OpenCV测量图像中物体距离

    先注意 这不是双目摄像头的 测距哦~~ 计算物体之间的距离与计算图像中物体的大小算法思路非常相似——都是从参考对象开始的。我们将使用0.25美分作为我们的参考对象,它的宽度为0.955英寸。 并且我们还将0.25美分总是放在图片最左侧使其容易识别。这样它就满足了我们上

    2024年02月02日
    浏览(40)
  • OpenCV实现单目相机检测物体尺寸

    目录 步骤: Canny边缘检测算法介绍: 多边形逼近 代码实现: 效果展示: 导入必要的库: cv2 用于图像处理, numpy 用于数组操作。 定义了一个函数 preprocess ,用于对图像进行预处理。首先将图像转换为灰度图,然后进行高斯模糊来平滑图像。接着使用腐蚀操作进一步去除噪

    2024年02月07日
    浏览(43)
  • 利用OpenCV计算条形物体的长度

    本文提供了一种利用opencv计算条形物体长度的方法,思路新奇,实现简单,同时也提供了代码实现。 目录 0、前言 1、解决步骤 1.1 利用分割方法得到物体mask 1.2 提取骨骼线 1.3 计算骨架线长度  2、验证         在图像处理中,我们可能会遇到求一个线条长度的场景,比如

    2024年02月15日
    浏览(49)
  • OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)

    人脸处理是人工智能中的一个热门话题,人脸处理可以使用计算机视觉算法从人脸中自动提取大量信息,例如身份、意图和情感。人脸在视觉交流中起着重要作用,这是由于人脸中包含大量非语言信息,因此人脸处理一直以来对于计算机视觉学习者来说都是非常有趣的话题,

    2024年02月06日
    浏览(96)
  • ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

    老王媳妇说上次那个pip挺好用的,就是长度这个有点迷茫, 那就测下吧 使用 pydub 和 mutagen 库都可以获取MP3文件的长度。 pydub获取音频长度 获取时长 精确到秒 格式设定 如果你需要将获取的时长转换为 “03:03” 这样的格式, 可以首先将时长转换为整数(秒数), 然后通过除法和

    2024年02月19日
    浏览(40)
  • Opencv-Python入门———配置opencv-python环境

    1.1配置python环境及编译器(Pycharm)下载 进入Pycharm官网下载Pycharm   PyCharm: the Python IDE for Professional Developers by JetBrains https://www.jetbrains.com/pycharm/ 进入Python官网下载最新版本Python Download Python | Python.org https://www.python.org/downloads/ 安装细则可参照博客 (36条消息) python,pycharm的安装

    2024年02月11日
    浏览(40)
  • 解决opencv-python 安装报错 Could not build wheels for opencv-python

    但是发现更新完了之后还是没用,因为主要原因是如果直接安装opencv默认安装最新版,此时找一个python3.6支持的版本就行了,如4.3.0.38,使用如下命令即可成功安装

    2024年02月16日
    浏览(64)
  • Python:安装opencv-python出错问题ERROR: Could not build wheels for opencv-python

    笔者在安装opencv-python的过程中遇到了如下错误 在安装opencv-python的过程,笔者直接通过pip命令进行安装,遇到了如下问题 命令 问题 直接使用上述命令安装的是最新版本,挑一个别的版本的opencv-python即可解决上述问题 使用命令如下 问题解决

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包