我正在使用OpenCV在视频中应用sobel边缘检测器。我可以在窗口中看到结果,然后我正在写视频。尽管我可以在窗口上看到正确的结果,但输出文件中的结果并不相同。
这是代码以及我可以在窗口和输出文件中看到的内容。知道是什么原因造成的吗?
if between (cap,0,25000): #Apply results on specific milliseconds of the video
Sobel operator - I still need to add colors
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
frame = cv2.Sobel(frame,cv2.CV_64F,1,0,5)
out.write(frame)
frame = cv2.resize(frame, None, fx = 0.2, fy = 0.2, interpolation = cv2.INTER_CUBIC)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
out.release()
cv2.destroyAllWindows()
print ("done")
问题已得到回答。我在这里再次添加答案:
Sobel输出是根据您的cv2.CV_64F浮动的。这是不可见的,因为它在0到1的范围内,但您编写的视频帧希望它是0到255。因此,您需要通过乘以255来缩放结果,然后剪裁到0到255的范围,并保存为uint8。frame=(255*cv2.Sobel(frame,cv2.CV_64F,1,0,5((.clip(0255(.astype(np.uint8(。请确保将numpy导入为np-