pythonopencv测距_使用Opencv python进行精确测量

importsysimportpickleimportcv2importmatplotlib.pyplotaspltimportglobimportosimportnumpyasnpimportpandasaspddeffind_circles(image,dp=1.7,minDist=100,param1=50,param2=50,minRadius=0,maxRadius=0):""" finds the center of circular objects in image using hough circle transform

Keyword arguments

image -- uint8: numpy ndarray of a single image (no default).

dp -- Inverse ratio of the accumulator resolution to the image resolution (default 1.7).

minDist -- Minimum distance in pixel distance between the centers of the detected circles (default 100).

param1 -- First method-specific parameter (default = 50).

param2 -- Second method-specific parameter (default = 50).

minRadius -- Minimum circle radius in pixel distance (default = 0).

maxRadius -- Maximum circle radius in pixel distance (default = 0).

Output

center -- tuple: (x,y).

radius -- int : radius.

ERROR if circle is not detected. returns(-1) in this case

"""circles=cv2.HoughCircles(image,cv2.HOUGH_GRADIENT,dp=dp,minDist=minDist,param1=param1,param2=param2,minRadius=minRadius,maxRadius=maxRadius)ifcirclesisnotNone:circles=circles.reshape(circles.shape[1],circles.shape[2])return(circles)else:raiseValueError("ERROR!!!!!! circle not detected try tweaking the parameters or the min and max radius")deffind_od(image_path_list):image_path_list.sort()print(len(image_path_list))result_df=pd.DataFrame(columns=["component_name","measured_dia_pixels","center_in_pixels"])fori,nameinenumerate(image_path_list):img=cv2.imread(name,0)# read the image in grayscaleret,thresh_img=cv2.threshold(img,50,255,cv2.THRESH_BINARY_INV)thresh_img=cv2.bilateralFilter(thresh_img,5,91,91)#smoothingedges=cv2.Canny(thresh_img,100,200)circles=find_circles(edges,dp=1.7,minDist=100,param1=50,param2=30,minRadius=685,maxRadius=700)circles=np.squeeze(circles)result_df.loc[i]=os.path.basename(name),circles[2]*2,(circles[0],circles[1])result_df.sort_values("component_name",inplace=True)result_df.reset_index(drop=True,inplace=True)return(result_df)df=find_od(glob.glob("./images/*"))mean_d=df.measured_dia_pixels.mean()std_deviation=np.sqrt(np.mean(np.square([abs(x-mean_d)forxindf.measured_dia_pixels])))mm_per_pixel=0.042print(std_deviation*mm_per_pixel)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值