如何使用OpenCV python获取对象的大小?

如何使用OpenCV python获取对象的大小?,python,image,opencv,image-processing,computer-vision,Python,Image,Opencv,Image Processing,Computer Vision,我有一个关于opencv python的问题,我这里有一个图像示例,我想知道如何使用opencv python获得这个对象的大小 这是示例图像 这是我想要的输出 我只是用画图来输出我想要的结果。这里有一个快速的建议,为什么不使用像YOLO这样的物体检测器呢,有很多预先训练好的重量你可以在线下载,幸运的是香蕉在coco类中 您可以查看此github回购协议: 编辑: 看看这里的样品 一个简单的方法是获得一个二值图像,然后在该图像上找到边界框。下面是绘制到图像上的框的宽度(以像素为单位)和高度的

我有一个关于opencv python的问题,我这里有一个图像示例,我想知道如何使用opencv python获得这个对象的大小

这是示例图像

这是我想要的输出


我只是用画图来输出我想要的结果。

这里有一个快速的建议,为什么不使用像YOLO这样的物体检测器呢,有很多预先训练好的重量你可以在线下载,幸运的是香蕉在coco类中

您可以查看此github回购协议:

编辑: 看看这里的样品

一个简单的方法是获得一个二值图像,然后在该图像上找到边界框。下面是绘制到图像上的框的宽度(以像素为单位)和高度的结果。要确定真实世界的测量值,需要校准信息将像素缩放为具体值(如厘米)。如果没有将像素转换为可量化长度的校准信息,则很难将其转换为真实尺寸

代码


不是轮廓,我需要得到这个物体的尺寸,呵呵。要测量这个物体,你必须先找到它的轮廓。或者使用机器学习或深度网络来识别图像上的物体。你需要先得到轮廓,然后在轮廓周围装一个盒子,测量盒子的尺寸。这将提供以像素为单位的大小。如果你想在真实世界中进行测量(如厘米或英寸),这是一个更困难的问题,因为你必须有图像的校准数据,以便将像素转换为真实世界。那么在检测到轮廓之后?如何得到尺寸?如果是真实世界的尺寸呢?对不起,你能澄清一下尺寸是指面积还是直径吗?我需要直径。所以我需要一个数据来证明这一点?要获得真实世界的尺寸,您必须有一些校准数据。现实生活中的像素转换率如何做到这一点,我这里有数据。你能帮我吗?我在图像上有一个比我的图像小一点的额外边界框,我想忽略这个矩形框。有什么帮助吗?
import cv2

# Load image, grayscale, Gaussian blur, Otsu's threshold
image = cv2.imread("1.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Find bounding box
x,y,w,h = cv2.boundingRect(thresh)
cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
cv2.putText(image, "w={},h={}".format(w,h), (x,y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (36,255,12), 2)

cv2.imshow("thresh", thresh)
cv2.imshow("image", image)
cv2.waitKey()