Widen_boundary/0_mindist_between_two_array.py

67 lines
1.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: UTF-8 -*-
import cv2
import time
import numpy as np
import skimage.exposure
'''
两个区域间最短距离
https://www.cnpython.com/qa/1329750
'''
import math
def downsample(num_arr,downsample_rate):
'''
下采样数组隔着downsample_rate个数取一个值
num_arr为数组
downsample_rate为采用概率为1-n的正整数
'''
num_arr_temp=[]
for i in range(len(num_arr)//downsample_rate-1):
num_arr_temp.append(num_arr[i*downsample_rate])
return num_arr_temp
# 中间输入的代码
# 将数组存在num_arr1和num_arr2中
t1=time.time()
# 1.读入图片
# img = cv2.imread('demo/171.png')
img = cv2.imread('demo/9.png')
t2=time.time()
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
contours, thresh = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 2.寻找轮廓(多边界)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, 2)
# 3.轮廓数组转为列表(多边界)
list_contours=[]
record=[]
num_arr1=contours[0]
num_arr2=contours[1]
# 3.对边界进行下采样,减小点数量。
num_arr11=downsample(num_arr1,10) #下采样边界点
num_arr22=downsample(num_arr2,10) #下采样边界点
print(num_arr1)
t3=time.time()
for i in num_arr11:
for j in num_arr22:
# record.append(abs(i[0] - j[0]))
record.append(math.sqrt((i[0][0] - j[0][0]) ** 2 +(i[0][1] - j[0][1]) ** 2 ) )
print('两区域最小距离',min(record))
t4=time.time()
print('读图时间:%s 找边界时间:%s 区域最短距离计算时间:%s'%(t2-t1,t3-t2,t4-t3))