美文网首页OpenCV 基础入门数字图像处理入门
[计算机视觉基础] OpenCV_3 Resizing the

[计算机视觉基础] OpenCV_3 Resizing the

作者: 砥砺前行的人 | 来源:发表于2021-09-23 11:39 被阅读0次

对于图片或者视频最常见的操作莫过于缩放了吧,本篇文章主要介绍一下使用 OpenCV-Python 对Image,Video 、Live Video 进行缩放尺寸。

当我们使用分辨率超高的相机或者WebCam进行拍摄例如720P的视频时,当视频上传到电脑上,我们可能会放大或者缩小视频源以适配播放器或者电脑显示器尺寸的需求,这是我们会对视频进行 Rescale,也许是缩小为原来的 0.75倍,也许是放大为原来的 1.25 倍,这些操作我们用 OpenCV-Python 都可以轻松的实现。

由于原先的视频像素总数是固定不变的,放大和缩小都会导致部分的像素被忽略或者新增新的像素,这里涉及到矩阵插值的算法。

Resize Image

视频的每一帧可以当做是图片,我们这里用视频来演示缩放图片:

import cv2 as cv

capture = cv.VideoCapture('./Videos/dog.mp4')


def resize_frame(img, scale=0.75):
    return cv.resize(img, dsize=None, fx=scale, fy=scale, interpolation=cv.INTER_AREA)


while True:

    isSuccess, frame = capture.read()
    if not isSuccess:
        break

    new_frame = resize_frame(frame)

    cv.imshow("video", frame)
    cv.imshow("video rescaled", new_frame)

    if cv.waitKey(20) & 0xFF == ord('s'):
        break

capture.release()
cv.destroyAllWindows()

scale_frame 是自定义函数,用以传入视频的一帧数据,按照缩放系数 scale 进行宽高的缩放。

cv. resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None):
调整一张图片的大小,src 即为输入的图片数据,dsize (dst size) 是一个 tuple,以代表返回图片的大小,fx, fy 为缩放倍数。dsizefx, fy 是两种缩放的方式,一种指定生成图片的大小,一种通过约定缩放系数,可根据实际场景灵活选择使用。

interpolation 为插值类型,一个图片从 4×4 放大到 8*8 的时候, 就会产生一些新的像素点,如何给这些值赋值, 就是 interpolation 插值所要解决的问题:

image.png
interpolation 具体类型如下:
enum InterpolationFlags
{
    INTER_NEAREST      = 0,
    INTER_LINEAR       = 1,
    INTER_CUBIC        = 2,
    INTER_AREA         = 3,
    INTER_LANCZOS4     = 4,
    INTER_MAX          = 7,
    WARP_FILL_OUTLIERS = 8,
    WARP_INVERSE_MAP   = 16,
};

典型的几个插值类型的时间损耗如下:


image.png

插值的详细讲解后续准备利用专门的主题进行阐述。

参考文章:
http://www.1zlab.com/wiki/python-opencv-tutorial/opencv-interpolation-algrithm/

相关文章

网友评论

    本文标题:[计算机视觉基础] OpenCV_3 Resizing the

    本文链接:https://www.haomeiwen.com/subject/cspngltx.html