1 原图,已知左上角正方形的实际大小为 2cm
2 转为灰度图 + 高斯模糊
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.GaussianBlur(gray, (9, 9), 0)
3、边缘检测
edged = cv2.Canny(blur, 50, 100)+ 开运算
4、根据左上角参考物体,计算单位长度中的像素个数、
pixel_per_cm = dist_in_pixel/dist_in_cm
5、计算物体轮廓的最小外接矩形,并获取四个顶点的坐标
cv2.minAreaRect(cnt) + box = cv2.boxPoints(box)
6、根据4个顶点和单位长度中像素的个数,计算被测量物体的宽、高
wid = euclidean(tl, tr)/pixel_per_cm
ht = euclidean(tr, br)/pixel_per_cm
-----------------------------------------------------------------------------------------------------------------------------------------------
这里的物体检测只使用于图像非常简单的情况,对于复杂背景的图像需要更有效的物体检测方法,如下图
参考文献
https://github.com/snsharma1311/object-size