Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用OpenCv(cv2)保存时帧数据发生更改_Python_Steganography_Cv2 - Fatal编程技术网

Python 使用OpenCv(cv2)保存时帧数据发生更改

Python 使用OpenCv(cv2)保存时帧数据发生更改,python,steganography,cv2,Python,Steganography,Cv2,我正在尝试在视频上实现隐写术。为此,我必须提取每个视频帧并将秘密消息隐藏在其中。现在我已成功提取帧,将消息隐藏在其中并使用OpenCv cv2保存。 但当我再次从隐藏视频中提取帧时,帧的像素值完全不同 即使我没有应用隐写术,只是提取并保存帧作为新视频,当我再次提取帧时,帧是完全不同的 下面是我使用OpenCv2提取和保存帧的代码 import cv2 def get_frame_count(cap): frame_count = int(cap.get(cv2.CAP

我正在尝试在视频上实现隐写术。为此,我必须提取每个视频帧并将秘密消息隐藏在其中。现在我已成功提取帧,将消息隐藏在其中并使用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()
两帧的帧数据完全不同。
这怎么可能呢?

mp4使用有损压缩,这会略微改变帧像素。可能仍然可以使用mp4,但在有损步骤后将视频编码到mp4时,您必须隐藏视频。这与使用jpeg进行图像隐写类似