Python之根据四个坐标确定其位于左上下右上下
1、导入模块
import numpy as np
2、存储所需要确定位置的四个坐标点
# 所需要确定位置的四个坐标
coordinate = [[2570, 1948], [2391, 1919], [2411, 1792], [2591, 1821]] # 常规矩形坐标
# coordinate = [[0, 1], [1, 0], [1, 2], [2, 1]] # 非常规(菱形)矩形坐标,用以验证代码
coordinate = np.array(coordinate)
3、求出中心坐标点
center = coordinate[0]
for _ in range(1, 4):
center = center + coordinate[_]
center = center / 4
4、找出x轴小于中心坐标点的点 left_coordinate
coordinate_temp = coordinate.copy() # 复制一份坐标,避免原坐标被破坏
left_coordinate = [] # 存储x轴小于中心坐标点的点
delete_index = [] # 将 x轴小于中心坐标点的点 存储进left_coordinate
for _ in range(4):
if(coordinate[_][0] < center[0]):
left_coordinate.append(coordinate[_])
delete_index.append(_)
# 将存储进 left_coordinate 的元素从coordinate_temp中删除
coordinate_temp = np.delete(coordinate_temp, delete_index, axis=0)
5、确定四个坐标所处位置 'left_top', 'right_top', 'right_bottom', 'left_bottom'
思路:
若 len(left_coordinate) == 2:
比较left_coordinate中的坐标,其y轴小于中心坐标点的,确定为 左下,另一个确定为左上
比较coordinate_temp中的坐标,其y轴小于中心坐标点的,确定为 右下,另一个确定为右上
若 len(left_coordinate) == 1:
确定该点为左下
比较coordinate_temp中的坐标,找出其x轴大于中心坐标点的,确定为右上,并删除该点,
比较剩下两点的y轴,大的确定为左上,小的确定为右下
left_coordinate_temp = left_coordinate.copy() # 避免程序过程因为left_coordinate的变动而导致最初的条件判断错误 if(len(left_coordinate_temp) == 2):
delete_index = [] for _ in range(2):
if(left_coordinate[_][1] < center[1]):
left_bottom = left_coordinate[_]
delete_index.append(_)
break left_coordinate = np.delete(left_coordinate, delete_index, axis=0)
left_top = left_coordinate[0]
for _ in range(2):
if(coordinate_temp[_][1] < center[1]):
right_bottom = coordinate_temp[_]
coordinate_temp = np.delete(coordinate_temp, [_], axis=0)
break
right_top = coordinate_temp[0] elif(len(left_coordinate_temp) == 1):
left_bottom = left_coordinate[0]
delete_index = [] for _ in range(3):
if(coordinate_temp[_][0] == center[0] and coordinate_temp[_][1] > center[1]):
left_top = coordinate_temp[_]
delete_index.append(_)
if(coordinate_temp[_][0] == center[0] and coordinate_temp[_][1] < center[1]):
right_bottom = coordinate_temp[_]
delete_index.append(_) coordinate_temp = np.delete(coordinate_temp, delete_index, axis=0)
right_top = coordinate_temp[0]
6、检验定位效果
print(left_top, right_top)
print(left_bottom, right_bottom)
运行结果:
Python之根据四个坐标确定其位于左上下右上下的更多相关文章
- Python 基础语法(四)
Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...
- 初学 Python(十四)——生成器
初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 ...
- Python第二十四天 binascii模块
Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...
- Python/MySQL(四、MySQL数据库操作)
Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Py ...
- python学习第四次笔记
python学习第四次记录 列表list 列表可以存储不同数据类型,而且可以存储大量数据,python的限制是 536870912 个元素,64位python的限制是 1152921504606846 ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- 第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误,
第四百零五节,centos7下搭建sentry错误日志服务器,接收python以及Django错误, 注意:版本,不然会报错 Docker >=1.11Compose >1.6.0 通过d ...
随机推荐
- 异步文件通道Java NIO你需要了解多少,来看看这篇文章
在Java 7,AsynchronousFileChannel 被添加到了Java NIO中.使用AsynchronousFileChannel可以实现异步地读取和写入文件数据. 创建一个Asynch ...
- 怎么在微信公众号上传PPT?
我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加附件使用“微附件”小程序的教 ...
- idea只导入部分依赖
首先为啥会导入部分依赖的呢? 可能是网络问题下载不下来,可以排除这一个,因为刚换的merrio阿里的源,而且之前都能下载 也可能是maven的设置问题,上网上搜了一些设置之后,还是不管用 然后怀疑是不 ...
- Python中 *args 和 **kwargs 的含义?
答:在python中,*args和**kwargs通常使用在函数定义里.*args 和 **kwargs 都允许你给函数传不定数量的参数,即使在定义函数的时候不知道调用者会传递几个参数.ps: *ar ...
- 【Spring Security】1.快速入门
1 导入Spring Security的相关依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
- 性能分析(4)- iowait 使用率过高案例
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前言 前面两个案例讲的都是上下文切换导致的 CPU ...
- C#LeetCode刷题-并查集
并查集篇 # 题名 刷题 通过率 难度 128 最长连续序列 39.3% 困难 130 被围绕的区域 30.5% 中等 200 岛屿的个数 38.4% 中等 547 朋友圈 45.1% ...
- 在eclipse中搜索 datasource.xml 文件:
- Debug很重要
之前做一个小功能,就是用php发送邮件,项目中已经使用了wordpress的wp_mail,所以同事建议我继续用wp_mail函数. 然而遇到了一个奇怪的情况,邮件没有发出去,也没有任何报错日志. 照 ...
- 读取topic数据存储到文件内
基于python3.6 from pykafka import KafkaClient import logging logging.basicConfig(level=logging.INFO) d ...