Python OpenCV 以低质量读取视频

Python OpenCV reads video in low quality

我正在尝试编写一个程序来为我剪切我的游戏剪辑。为了达到我想要的效果,我需要在框架中间检测到红色 "X"(表示杀戮),这是一个 12px * 12px 区域,所以我需要完整的质量。在调试时,我意识到 OpenCV 读取的帧质量似乎低于我在视频播放器中看到的质量。

这是一个例子:

This is the "X" I've cut from a video player

This is the "X" that OpenCV read in

两者同框

这是我用来调试的代码:

import cv2
import numpy as np

vid = cv2.VideoCapture(path)

success, frame = vid.read()
while success:
    cv2.imshow("Frame", frame)
    # Pause video
    if cv2.waitKey(1) & 0xFF == ord('s'):
        cv2.waitKey(0)
    # Quit video
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

    success, frame = vid.read()

cv2.destroyAllWindows()

我也检查了宽度和高度,它们似乎与原始视频相同。我正在使用 OpenCV 4.2.0 版。什么可能导致此问题?

感谢任何帮助。

如果您尝试从文件中读取帧并希望更改其分辨率,您可能需要使用 here 中所述的调整大小方法。这需要在循环内完成,就在您读入框架之后。它可能是这样的:

resize(ret, Size(width, height), 0, 0, INTER_CUBIC); 

示例:

b = cv2.resize(frame,(1280,720),fx=0,fy=0, interpolation = cv2.INTER_CUBIC)

希望对您有所帮助。

我明白了。我唯一要做的就是将图片转换为 jpeg(出于某种原因)。我使用这个函数在内存中转换它:

def convertToJpeg(img):
    result, encoded = cv2.imencode('.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 100])
    return cv2.imdecode(encoded, 1)

感谢大家的帮助!