如何通过照片找到物体的面积?
How can i find area of an object by photo?
我需要求一个不规则物体的面积,比如这张柠檬素描的面积。
这是我的算法
- 在附近放一枚硬币
- 以像素为单位测量其半径,
- 知道它的实际半径计算像素与毫米的比率。
- 以某种方式从草图中删除背景
- 以像素为单位计算其面积(只需计算它们)
- 乘以已知的比值得到它的实际面积。
我发现了一些问题:
- 当附近有其他物体时,cv2 houghcircles 方法不起作用
- Remove.bg API 仅处理完全着色的对象,因此它删除了笔画之间的空格。
能否请您提出任何其他方法,或者帮助我实现这类东西。示例图片和我设法编写的一些代码将在下面。
霍夫圆
import cv2
import numpy as np
img = cv2.imread('thresh.png',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=99,minRadius=100,maxRadius=500)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
print(f"Radius: {i[2]}")
cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Remove.bg API
def clean(path):
import requests
response = requests.post(
'https://api.remove.bg/v1.0/removebg',
files={'image_file': open('imagepath.png', 'rb')},
data={'size': 'auto'},
headers={'X-Api-Key': 'my Api key'},
)
if response.status_code == requests.codes.ok:
with open('no-bg.png', 'wb') as out:
out.write(response.content)
else:
print("Error:", response.status_code, response.text)
谢谢!
我需要求一个不规则物体的面积,比如这张柠檬素描的面积。 这是我的算法
- 在附近放一枚硬币
- 以像素为单位测量其半径,
- 知道它的实际半径计算像素与毫米的比率。
- 以某种方式从草图中删除背景
- 以像素为单位计算其面积(只需计算它们)
- 乘以已知的比值得到它的实际面积。
我发现了一些问题:
- 当附近有其他物体时,cv2 houghcircles 方法不起作用
- Remove.bg API 仅处理完全着色的对象,因此它删除了笔画之间的空格。
能否请您提出任何其他方法,或者帮助我实现这类东西。示例图片和我设法编写的一些代码将在下面。
霍夫圆
import cv2
import numpy as np
img = cv2.imread('thresh.png',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=99,minRadius=100,maxRadius=500)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
print(f"Radius: {i[2]}")
cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Remove.bg API
def clean(path):
import requests
response = requests.post(
'https://api.remove.bg/v1.0/removebg',
files={'image_file': open('imagepath.png', 'rb')},
data={'size': 'auto'},
headers={'X-Api-Key': 'my Api key'},
)
if response.status_code == requests.codes.ok:
with open('no-bg.png', 'wb') as out:
out.write(response.content)
else:
print("Error:", response.status_code, response.text)
谢谢!