python - 使用 OpenCv (cv2) 保存时帧数据发生变化
问题描述
我正在尝试对视频实施隐写术。为此,我必须提取每个视频帧并在其中隐藏秘密消息。现在我已经成功提取帧,在其中隐藏消息并使用 OpenCv cv2 保存它。但是当我再次从隐秘视频中提取帧时,这些帧的像素值完全不同。
即使我没有应用隐写术,只是将帧提取并保存为新视频,当我再次提取它们时,这些帧完全不同。
这是我用来使用 OpenCv2 提取和保存帧的代码
import cv2
def get_frame_count(cap):
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) - 1
return frame_count
def get_fps_rate(cap):
fps = cap.get(cv2.CAP_PROP_FPS)
return fps
video_input_path = "./sample4.mp4"
cap = cv2.VideoCapture(video_input_path)
width = (int)(cap.get(cv2.CAP_PROP_FRAME_WIDTH ))
height = (int)(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
frame_count = get_frame_count(cap)
fps = get_fps_rate(cap)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video = cv2.VideoWriter('newVideo.mp4', fourcc, fps, (width, height))
count = 0
while cap.isOpened():
ret, frame = cap.read()
video.write(frame)
count = count + 1
if (count >= (frame_count)):
cap.release()
break
video.release
cv2.destroyAllWindows()
要检查两个视频(sample4.mp4 和 newVideo.mp4)中第一帧的相等性,我使用以下代码:
import cv2
def get_frame_count(cap):
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) - 1
return frame_count
video_input_path = "./sample4.mp4"
cap = cv2.VideoCapture(video_input_path)
frame_count = get_frame_count(cap)
width = (int)(cap.get(cv2.CAP_PROP_FRAME_WIDTH ))
height = (int)(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
ret, frame = cap.read()
print frame
cap.release()
video_input_path = "./newVideo.mp4"
cap = cv2.VideoCapture(video_input_path)
frame_count = get_frame_count(cap)
width = (int)(cap.get(cv2.CAP_PROP_FRAME_WIDTH ))
height = (int)(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
ret, frame = cap.read()
print frame
cap.release()
并且两帧的帧数据完全不同。这怎么可能?
解决方案
推荐阅读
- python - 如何在 Beautiful Soup 中的标签上使用 if 语句?
- git - 如何在git中自动排除某些文件类型?
- facebook - 无法在 Facebook Business Manager 中访问 Whatsapp Manager
- c++ - C ++复制构造函数,用于指向对象的指针数组
- assembly - 在程序集中调用多个标签/函数的问题
- python - 频率分布数据框中的所有值
- javascript - 如何使用 Javascript 而不是 CSS 来检索元素(图像)的位置?
- algorithm - B-Tree保存在File中的好处不是就丢失了吗?
- docker - Docker 服务:由于不支持 IPv6,无法使用浏览器连接到 localhost
- filesystems - 修改原始磁盘会损坏文件系统吗?