我试图从Spring的照片中得到尺寸。我附上了我从光学比较仪得到的Spring图像。当我运行代码并打印出area的结果时,它给了我大约八到九个其他对象的面积,所以我添加了边界框,Spring由一堆较小的边界框组成。我不知道如果我不理解的概念层次结构的什么,但我有好看的图像灰度,然后到阈值和精明的边缘发现者,所以我不知道我错过了什么在这里。我也试着在其他图像上运行代码,它做了同样的事情,它在单个对象周围给予了多个边界框。让我知道你的想法
import cv2
import numpy as np
# Read Image
img = cv2.imread("springNpng.png")
imgGray = cv2.cvtColor(img, cv2.IMREAD_GRAYSCALE)
ret, thresh = cv2.threshold(imgGray, 170, 255, cv2.THRESH_BINARY)
edged = cv2.Canny(thresh, 30, 200)
contours, heirarchy = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 2)
#cnt = contours
#M = cv2.moments(cnt)
for cnt in contours:
area = cv2.contourArea(cnt)
print(area)
(x, y, w, h) = cv2.boundingRect(cnt)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv2.imshow("img", img)
cv2.imshow("edged", edged)
cv2.waitKey(0)
光学比较仪的压缩Spring:
1条答案
按热度按时间rta7y2nd1#
这里有一种在Python/OpenCV中解决问题的方法。
输入:
输入上的船体和旋转矩形(红色是凸包,绿色是旋转矩形)
旋转矩形参数: