我正在阅读python上的视频帧,并且试图找到每个帧索引的RGB。我需要检测LED(将阈值设置为开/关-红色/黑色),但索引遇到问题。
我需要访问图像左下角的RGB值。
# Check if camera opened successfully
if (video.isOpened()== False):
print("Error opening video stream or file")
# Read until video is completed
while(video.isOpened()):
# Capture frame-by-frame
ret, frame = video.read()
frame_read += 1
if ret == True:
# Display the resulting frame
cv2.imshow('Frame',frame)
height, width, channels = frame.shape
#Accessing RGB pixel values
for x in range(round(width/2), width) :
for y in range(0, round(height/2)) :
print(frame[x,y,2], frame[x,y,0], frame[x,y,1], frame_read) #R,B,G Channel Value
# Press Q on keyboard to exit
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# Break the loop
else:
break
video.release()
cv2.destroyAllWindows()
我的错误是在行上打印的(frame [x,y,2],frame [x,y,0],frame [x,y,1],frame_read) IndexError:索引1080超出了尺寸为1080的轴0的范围
答案 0 :(得分:2)
当您将框架切片为frame[x, y, 2]
时,您忘记了frame
的第一片始终是高度(就像您在height, width, channels = frame.shape
中所做的那样),因此您在帧切片的范围不能从0
到width
(在您的情况下为1920),因为第一个切片(您的x
)的范围是0
到height
(1080)。
引用宽度的y
也一样(因此您的范围为0到1920)。
只需交换帧切片,您就可以开始:
print(frame[y,x,2], frame[y,x,0], frame[y,x,1], frame_read)