Python 3.x 如何删除嵌套for循环并在插入时使用numpy数组

Python 3.x 如何删除嵌套for循环并在插入时使用numpy数组,python-3.x,numpy,opencv,for-loop,numpy-indexing,Python 3.x,Numpy,Opencv,For Loop,Numpy Indexing,我有一个包含580帧的视频。我需要能够从视频中检测到绿色,并创建一个遮罩,以便在找到绿色的地方放置零值,其余应为255。我已经将视频转换为HSV格式,并且正在使用嵌套for循环,这样做大约需要一个小时。我想知道是否有更快的方法来完成此操作。 这是我目前的代码 for i in range(0, len(temp)): temp[i] = cv2.cvtColor(temp[i], cv2.COLOR_BGR2HSV) for k in range(0, len(temp)): fo

我有一个包含580帧的视频。我需要能够从视频中检测到绿色,并创建一个遮罩,以便在找到绿色的地方放置零值,其余应为255。我已经将视频转换为HSV格式,并且正在使用嵌套for循环,这样做大约需要一个小时。我想知道是否有更快的方法来完成此操作。
这是我目前的代码

for i in range(0, len(temp)):
   temp[i] = cv2.cvtColor(temp[i], cv2.COLOR_BGR2HSV)
for k in range(0, len(temp)):
    for i in range(0, len(temp[k])):
        for j in range(0, len(temp[k][i])):
           if(temp[k][i][j][0] > 50 and temp[k][i][j][0] < 65 and temp[k][i][j][2] > 150):
               temp1[k][i][j][0] = 0
               temp1[k][i][j][1] = 0
               temp1[k][i][j][2] = 0
           else:
               temp1[k][i][j][0] = 255
               temp1[k][i][j][1] = 255
               temp1[k][i][j][2] = 255
对于范围(0,len(temp))内的i:
温度[i]=cv2.CVT颜色(温度[i],cv2.COLOR_BGR2HSV)
对于范围(0,透镜(温度))内的k:
对于范围(0,len(温度[k])内的i:
对于范围(0,len)(温度[k][i])内的j:
如果(温度[k][i][j][0]>50且温度[k][i][j][0]<65且温度[k][i][j][2]>150):
temp1[k][i][j][0]=0
temp1[k][i][j][1]=0
temp1[k][i][j][2]=0
其他:
temp1[k][i][j][0]=255
temp1[k][i][j][1]=255
temp1[k][i][j][2]=255

temp是我的HSV数组,temp1是我正在创建的掩码

不是
cv2
专家,但是如果它像
numpy
数组一样工作,那么

for i in range(0, len(temp)):
   temp[i] = cv2.cvtColor(temp[i], cv2.COLOR_BGR2HSV)
   temp1[i] = (1 - cv2.inRange(temp[i], (50, 0, 150), (65, 255, 255)).astype(int)) * 255

不是
cv2
专家,但是如果它像
numpy
数组一样工作,那么

for i in range(0, len(temp)):
   temp[i] = cv2.cvtColor(temp[i], cv2.COLOR_BGR2HSV)
   temp1[i] = (1 - cv2.inRange(temp[i], (50, 0, 150), (65, 255, 255)).astype(int)) * 255

使用
cv2.inRange()
查看颜色阈值我正在寻找没有范围内函数的答案谢谢你的建议这是你不想使用
cv2.inRange()
的具体原因吗??这可能是最好的方法,因为它是矢量化的,具有可调整的最小/最大颜色阈值,并将为您提供一个输出掩码,其中所需的绿色像素为白色,背景为黑色。这是一个愚蠢的分配的一部分,这就是为什么。这就是为什么我把问题标为完整。因为尽管我仍在寻求优化这些循环,但不使用cv2.inRange的问题不是很现实我正在寻找一个没有范围内函数的答案谢谢你的建议这是你不想使用
cv2.inRange()的具体原因。
??这可能是最好的方法,因为它是矢量化的,具有可调整的最小/最大颜色阈值,并将为您提供一个输出掩码,其中所需的绿色像素为白色,背景为黑色。这是一个愚蠢的分配的一部分,这就是为什么。这就是为什么我把问题标为完整。因为尽管我仍在寻求优化这些循环,但不使用cv2.inRange的问题并不是一个非常现实的问题。