操作图像肯定需要操作图像的坐标,在用c++版的opencv时用vector处理坐标,当时没有出现什么问题。
如今想用min和max函数在一组坐标中得到x坐标或者y坐标的最大最小值(当然可以自己写几行代码,用逐个比较的方法获取最大最小值,但是太麻烦),遇到了问题。
1、用列表处理
目前我需要处理的坐标有3个,我用
center=(center_x,center_y)
point_reference.append(center)
将三个坐标放在了一个列表里,如下:
point_reference = [(471, 420), (168, 420), (470, 117)]
很自然的point_reference[0][0]应该是471,point_reference[0][1]是420,得到的结果也是正确的。(正确是因为先索引了列表再索引了元组)
所以我认为,所有的x坐标应该这么表示point_reference[:][0],而y轴的坐标应该这么表示point_reference[:][1] (我记得我用c++时是这么处理的),大错特错,我把它看成了一个3*2的矩阵,但是同时也没有用矩阵的索引形式去索引,所以最后得到的结果就是
print point_reference[:][0]得到元组里的第一个坐标(471, 420)
print point_reference[:][1]得到元组里的第一个坐标(168, 420)

所以我最终用min( print point_reference[:][0])得到的是420,并不是x轴坐标的最小值。

然后我想会不会这样取取到的是行,然后我把两个中括号换了一下
print point_reference[1][:] 得到的是(168, 420),第二个坐标。

接着我又改变冒号前后的数字,发现有时候会报错索引超界,有时候会得到一个或两个坐标,所以我觉得这种索引方法并没有什么意义,还是得好好研究一下python的基础知识。

2、所以我觉的在python中坐标的表示用矩阵更好,比如我此时是三个二维坐标,定义一个3*2的矩阵。
import numpy as np
point_reference = np.zeros(shape=(3,2))

矩阵的用法:
import numpy as np 导入numpy库
(1)用array定义矩阵
比如:point_referencenp=np.array( [[471, 420], [168, 420], [470, 117]])
(2)用zeros定义空矩阵
比如:point_reference = np.zeros(shape=(3,2))
(3)矩阵操作
point_referencenp[:,0]就是取矩阵X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素。
point_referencenp[:, m:n]即取矩阵X的所有行中的的第m到n-1列数据,含左不含右。
point_referencenp[0,:]就是取矩阵X的第0行的所有元素,X[1,:]取矩阵X的第一行的所有元素。
point_referencenp[a:b,c:d]表示切取第a+1到b行,c+1到d列的矩阵。