OpenCV像素点NumPy数组求最值问题求助
搞定NumPy数组的最值获取问题
嘿,作为NumPy新手遇到这种嵌套格式的数组确实容易懵!别担心,咱们一步步来解决~
首先得先搞清楚cv2.findNonZero(mask)返回的数组形状:它其实是一个**形状为(N, 1, 2)**的NumPy数组,所以你看到的输出才是一个个[[x y]]的嵌套结构。咱们可以先把这个数组简化成更易处理的格式:
# 把形状从(N,1,2)改成(N,2),每一行就是一个(x,y)坐标对 pixelpoints = pixelpoints.reshape(-1, 2)
调整完形状后,你的数组就会变成这样(以你给的示例数据为例):
[[1288 700] [1289 700] [1290 700] [1291 700] [1287 701] [1288 701] [1289 701] [1290 701] [1291 701] [1292 701]]
接下来获取最值就非常简单了:
获取x坐标的最值
x_min = pixelpoints[:, 0].min() # 所有x中的最小值 x_max = pixelpoints[:, 0].max() # 所有x中的最大值
获取y坐标的最值
y_min = pixelpoints[:, 1].min() # 所有y中的最小值 y_max = pixelpoints[:, 1].max() # 所有y中的最大值
如果只是想获取整个数组里的全局最值,直接用:
global_min = pixelpoints.min() global_max = pixelpoints.max()
而且完全不用担心百万条数据的性能问题,NumPy的这些内置方法都是基于C实现的,比手动循环快得多,处理起来毫无压力~
内容的提问来源于stack exchange,提问作者gluttony47
相关产品推荐
相关产品推荐

