在Mac上,以下代码行让我苦苦挣扎了一段时间,这使我发回错误
错误:(-215)scn == 3 || scn == 4 in ipp_cvtColor“
在我尝试编写视频out.write(out_frame)
的那一行
这是我的代码:
import numpy as np
import cv2
from scipy import ndimage, misc
dir_vid='/Users/qandre/Pictures/Videos/video_input.mp4'
cap = cv2.VideoCapture(dir_vid)
fps = cap.get(cv2.CAP_PROP_FPS)
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
out = cv2.VideoWriter('/Users/qandre/Pictures/Videos/video_output.mp4', fourcc, int(fps), (int(w), int(h)), isColor=False)
if not out :
print("!!! Failed VideoWriter: invalid parameters")
sys.exit(1)
while(cap.isOpened()):
ret, frame = cap.read()
if ret is True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
else:
continue
edges = cv2.Canny(gray,50,150)
out.write(edges)
# Display the resulting frame
cv2.imshow('frame',edges)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
out.release()
cap.release()
cv2.destroyAllWindows()
那么...可能有什么问题吗?
由于cvtColor()函数,我必须精确地说,只有在将框架灰度旋转时才会出现此错误。
答案 0 :(得分:0)
我找到了解决问题的答案:
.MP4一直在寻找要写入的3通道BGR图像,但由于我试图写入灰度图像,所以我只提供了一个单通道图像
尝试这样做:
edges = cv2.cvtColor(edges,cv2.COLOR_GRAY2BGR)
将我的灰度图像转换为BGR图像。虽然我的像素值保持灰色,但是这会将边缘更改为3通道图像,因此现在可以使用了。