使用 python-openCV 读取视频并保存为 pgm 格式图像
Reading video and saving in pgm format images using python-openCV
首先,如果这个问题很愚蠢,我很抱歉。我是 python opencv 和图像处理的初学者。
我创建了一个程序来读取视频作为输入并将其保存为 pgm 格式。
import cv2
vidcap = cv2.VideoCapture('input_video.mp4')
success,image = vidcap.read()
count = 0
while success:
cv2.imwrite("frame%d.pgm" % count, image) # save frame as PGM file
success,image = vidcap.read()
print('Read a new frame: ', success)
count += 1
vidcap.release()
在 运行 之后,我的帧似乎不完全是 PGM 图像的格式。 "magic number" 是 "F6" 而不是 PGM 格式的 "F5"。据我所知,PPM 格式(它可能称为 PGM 'color',一种最小公分母彩色图像文件格式)的 "magic number" 是 "F6"。我不明白为什么在这种情况下我不能有精确的 PGM 图像。谁能帮我解决这个问题并给我一个输出 PGM 格式帧的解决方案?
video(我不会在这里上传视频,所以攻击link)。我测试了这个视频,甚至测试了它的灰度版本,但 "magic number" 总是 "F6"。
在 SO 中,我发现这个 link 可能与我的问题相似,但它是针对 C++ 的。
您的图像将是彩色的,因此您需要先转换为灰度,然后才能将其保存为 PGM - 即 "Portable Grey Map":
# Convert to grey
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Write to disk
cv2.imwrite("frame%d.pgm" % count, gray)
顺便说一句,恕我直言,在不同的地方重复执行相同操作的代码通常不是一个好主意——这会造成维护方面的噩梦。而不是在此处执行 vidcap.read()
两次:
success,image = vidcap.read()
...
while success:
cv2.imwrite("frame%d.pgm" % count, image)
success,image = vidcap.read()
考虑使用它,这样您就可以只在一个地方阅读视频,而且 add/change 参数只有一个地方:
while True:
success,image = vidcap.read()
if not success:
break
cv2.imwrite("frame%d.pgm" % count, image)
首先,如果这个问题很愚蠢,我很抱歉。我是 python opencv 和图像处理的初学者。
我创建了一个程序来读取视频作为输入并将其保存为 pgm 格式。
import cv2
vidcap = cv2.VideoCapture('input_video.mp4')
success,image = vidcap.read()
count = 0
while success:
cv2.imwrite("frame%d.pgm" % count, image) # save frame as PGM file
success,image = vidcap.read()
print('Read a new frame: ', success)
count += 1
vidcap.release()
在 运行 之后,我的帧似乎不完全是 PGM 图像的格式。 "magic number" 是 "F6" 而不是 PGM 格式的 "F5"。据我所知,PPM 格式(它可能称为 PGM 'color',一种最小公分母彩色图像文件格式)的 "magic number" 是 "F6"。我不明白为什么在这种情况下我不能有精确的 PGM 图像。谁能帮我解决这个问题并给我一个输出 PGM 格式帧的解决方案?
video(我不会在这里上传视频,所以攻击link)。我测试了这个视频,甚至测试了它的灰度版本,但 "magic number" 总是 "F6"。
在 SO 中,我发现这个 link 可能与我的问题相似,但它是针对 C++ 的。
您的图像将是彩色的,因此您需要先转换为灰度,然后才能将其保存为 PGM - 即 "Portable Grey Map":
# Convert to grey
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Write to disk
cv2.imwrite("frame%d.pgm" % count, gray)
顺便说一句,恕我直言,在不同的地方重复执行相同操作的代码通常不是一个好主意——这会造成维护方面的噩梦。而不是在此处执行 vidcap.read()
两次:
success,image = vidcap.read()
...
while success:
cv2.imwrite("frame%d.pgm" % count, image)
success,image = vidcap.read()
考虑使用它,这样您就可以只在一个地方阅读视频,而且 add/change 参数只有一个地方:
while True:
success,image = vidcap.read()
if not success:
break
cv2.imwrite("frame%d.pgm" % count, image)