python cv2 视频分辨率
python cv2 video resolution
我尝试以这种方式更改视频分辨率(使用 mp4!)(至 800x600):但是它不起作用,当我使用 cap.get(3) 和 (4) 时,它的 return 每次默认 1280x720!
import cv2
cap = cv2.VideoCapture('file')
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我做错了什么?
我试过了 -
cv2.resizeWindow("ssss", 300, 300),
和
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
没有效果!
我认为您的代码中有几处可能需要注意。
如 VideoCapture
的 OpenCV documentation 中所述,如果您想访问默认网络摄像头,则需要按如下方式初始化 class:
cap = cv2.VideoCapture('file')
如果您随后尝试更改相机的分辨率,我建议将两条 set
行移动到 cap
初始化的正下方,并且只执行一次 - 而不是每次你在框架中阅读的时间。您还可以使用常量来访问正确的属性:
cap = cv2.VideoCapture('file')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
# Your while loop and the rest of the code...
如果您尝试从文件中读取帧并想要更改其分辨率,您可能需要使用 resize
方法,如 here 所述。这需要在循环内完成,就在您读入框架之后。它可能是这样的:
resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC);
希望对您有所帮助。
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
您的代码适用于网络摄像头,不适用于文件
对于视频文件,您可以调整 window
cv2.resizeWindow(winname, width, height)
首先用名称定义 window 并调整它的大小
例子
cv2.namedWindow("frame", 0);
cv2.resizeWindow("frame", 800,600);
cap.set()
在 640,480
分辨率以下无效
(至少对于我的 macbook pro)
您可以增加分辨率,但例如将其设置为 300,300
没有任何效果。
至于我的经验,你需要在 read()
之后在框架上调用 resize()
。
我尝试以这种方式更改视频分辨率(使用 mp4!)(至 800x600):但是它不起作用,当我使用 cap.get(3) 和 (4) 时,它的 return 每次默认 1280x720!
import cv2
cap = cv2.VideoCapture('file')
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我做错了什么?
我试过了 -
cv2.resizeWindow("ssss", 300, 300),
和
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
没有效果!
我认为您的代码中有几处可能需要注意。
如
VideoCapture
的 OpenCV documentation 中所述,如果您想访问默认网络摄像头,则需要按如下方式初始化 class:cap = cv2.VideoCapture('file')
如果您随后尝试更改相机的分辨率,我建议将两条
set
行移动到cap
初始化的正下方,并且只执行一次 - 而不是每次你在框架中阅读的时间。您还可以使用常量来访问正确的属性:cap = cv2.VideoCapture('file') cap.set(cv2.CAP_PROP_FRAME_WIDTH, width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height) # Your while loop and the rest of the code...
如果您尝试从文件中读取帧并想要更改其分辨率,您可能需要使用
resize
方法,如 here 所述。这需要在循环内完成,就在您读入框架之后。它可能是这样的:resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC);
希望对您有所帮助。
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
您的代码适用于网络摄像头,不适用于文件
对于视频文件,您可以调整 window
cv2.resizeWindow(winname, width, height)
首先用名称定义 window 并调整它的大小
例子
cv2.namedWindow("frame", 0);
cv2.resizeWindow("frame", 800,600);
cap.set()
在 640,480
分辨率以下无效
(至少对于我的 macbook pro)
您可以增加分辨率,但例如将其设置为 300,300
没有任何效果。
至于我的经验,你需要在 read()
之后在框架上调用 resize()
。