def get_mid_x(image): size = image.shape h = size[0] w = size[1] flag_back = 0 x = 0 y = 0 ttt = cv2.getTickCount() for i in range(0,h,3): for j in range(w): if image.item(i, j) & 255: flag_back = 1 y = i x = j break if flag_back: break for k in range(w,x): if image.item(y, k) & 255: x = (k+x)/2 return x,y,1 print (cv2.getTickCount() - ttt)/cv2.getTickFrequency() # 粗略扫描2:耗时 0.5 - 2ms 缺点:目标较近时,波动大 return x, y, 0 def get_mid_y(image): #不需要找y了 size = image.shape h = size[0] w = size[1] flag_back = 0 x = 0 y = 0 ttt = cv2.getTickCount() for i in range(0,w,3): for j in range(h): if image.item(j, i) & 255: flag_back = 1 y = j x = i break if flag_back: break for k in range(h,y): if image.item(k, x) & 255: y = (k+y)/2 return x,y,1 print (cv2.getTickCount() - ttt)/cv2.getTickFrequency() # 粗略扫描:耗时 0.5 - 2ms 缺点:目标较近时,波动大 return x, y, 0
时间: 2024-02-10 10:28:10 浏览: 129
image_process.zip_Reading image
这是两个用于获取目标位置的函数,一个是获取心点的x坐标,另一个是获取中心点的y坐标。
get_mid_x函数通过在图像的每行像素中查找第一个非零值来确定中心点的x坐标。它从上到下每隔3行进行一次检查,以减少计算量。一旦找到非零值,就将其记录为中心点的x坐标,并终止循环。然后,它向右搜索,找到最后一个非零值,并将其与之前记录的x坐标取平均,得到最终的中心点x坐标。
get_mid_y函数通过在图像的每列像素中查找第一个非零值来确定中心点的y坐标。它从左到右每隔3列进行一次检查,以减少计算量。一旦找到非零值,就将其记录为中心点的y坐标,并终止循环。然后,它向下搜索,找到最后一个非零值,并将其与之前记录的y坐标取平均,得到最终的中心点y坐标。
这两个函数都使用了粗略扫描的方式来加速计算速度。然而,它们可能在目标较近时存在较大的波动性,因为只是简单地取第一个和最后一个非零值进行计算。
希望对您有所帮助!如果您有任何其他问题,请随时提问。
阅读全文