我有一个破砖游戏的视频。有些砖是红色的。我必须将红色变为黑色。我试图在numpy数组中找到红色像素的位置,并在这些像素上分配黑色。我在下面提供的代码将红色变成黑色。但是过程如此缓慢,以至于12秒钟的视频耗时超过5分钟。有没有更快的方法可以做到这一点?
import numpy as np
import cv2
vid = "input.mp4"
cap = cv2.VideoCapture(vid)
while(True):
ret, frame = cap.read()
if ret:
for i in zip(*np.where(frame == [0,0,255])):
frame[i[0], i[1], 0] = 0
frame[i[0], i[1], 1] = 0
frame[i[0], i[1], 2] = 0
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cv2.destroyAllWindows()
最佳答案
试试看,阅读代码中的注释以获取更多信息。
import cv2
import numpy as np
img = cv2.imread("1.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of red color in HSV
lower_red = np.array([0,50,50])
upper_red = np.array([10,255,255])
# Threshold the HSV image to get only red colors
mask = cv2.inRange(hsv, lower_red, upper_red)
red_only = cv2.bitwise_and(img,img, mask= mask)
#convert mask to 3-channel image to perform subtract
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
res = cv2.subtract(img,mask) #negative values become 0 -> black
cv2.imshow("img",img)
cv2.imshow("mask",mask)
cv2.imshow("red_only",red_only)
cv2.imshow("res",res)
cv2.waitKey()
cv2.destroyAllWindows()
PS。而且这种方法几乎不需要时间,我已经在计算机上进行了测试,对于1280x720的图像大约需要3毫秒
关于python - 使用OpenCV Python更改视频中的单色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54817641/