• OpenCV(十):图像缩放、翻转、拼接的介绍与使用


    目录

    (1)图像缩放:resize()

    (2)图像翻转: flip()

    (3)图像拼接:hconcat() 和vconcat()


    (1)图像缩放:resize()

    使用 cv2.resize() 函数可以实现图像的缩放。你需要指定目标图像的大小或缩放比例以及插值方法。

    void cv::resize ( InputArraysrc

    OutputArray dst,

    Size   dsize,

    double   fx,

    double    fy,

    int           interpolation = INTER LINEAR(双线性插值)

    • src:输入图像。
    • dst:输出图像,图像的数据类型与src相同。
    • dsize:输出图像的尺寸。
    • fx:水平轴的比例因子,如果将水平轴变为原来的两倍,则赋值为2。
    • fy:垂直轴的比例因子,如果将垂直轴变为原来的两倍,则赋值为2。
    • interpolation:差值方法的标志。

    以下是常用的 interpolation 参数及其描述:

    1. cv2.INTER_NEAREST:最近邻插值

      • 这是一种最简单的插值方法,它根据目标位置附近的最近一个已知像素的值来估算新的像素值。速度很快,但可能会导致块状的图像效果,特别是在放大图像时。

    2. cv2.INTER_LINEAR:双线性插值

      • 双线性插值考虑了目标位置附近的四个最近已知像素的值,然后根据距离和权重进行插值计算。这通常提供比最近邻插值更平滑的结果。

    3. cv2.INTER_CUBIC:双三次插值

      • 双三次插值使用目标位置附近的16个最近已知像素,根据距离和权重进行插值。它可以提供更高质量的图像,但计算开销较大。

    4. cv2.INTER_LANCZOS4:Lanczos 插值

      • Lanczos 插值是一种高质量的插值方法,它使用一个较大的像素邻域来进行插值。它通常用于需要高质量图像的情况,但计算成本更高。

    5. cv2.INTER_AREA:像素区域重采样

      • 像素区域重采样是一种在图像缩小时常用的插值方法,它会根据目标位置附近的像素区域的平均值来计算新的像素值。这可以减少图像的模糊程度。

    例子:

             

            (原图)                                (gray)

    1. Mat gray;
    2. cvtColor(image,gray,COLOR_BGR2GRAY);
    3. Mat smallmg,bigImg0,bigImg1,bigImg2;
    4. resize(gray,smallmg,Size(15,15),0,0,INTER_AREA);//先将图像缩小
    5. resize(smallmg,bigImg0,Size(30,30),0,0,INTER_NEAREST);//最近邻插值
    6. resize(smallmg,bigImg1,Size(30,30),0,0,INTER_LINEAR);//双线性插值
    7. resize(smallmg,bigImg2,Size(30,30),0,0,INTER_CUBIC);//双三次插值

    (smallmg)              (bigImg0)               (bigImg1)            (bigImg2)

    (2)图像翻转: flip()

    使用 cv2.flip() 函数可以实现图像的翻转。你需要指定图像和翻转方向(水平、垂直或同时水平和垂直)。

    void cv::flip ( InputArray     src,

    OutputArray dst,

    int                 flipCode

    • src:输入图像
    • dst: 输出图像,与src具有相同的大小和数据类型以及通道数。
    • flipCode: 翻转方式标志,当 flipCode 的值大于0时,图像将在水平方向上进行翻转,即左右镜像。 当 flipCode 的值为 0 时,图像将在垂直方向上进行翻转,即上下镜像。 当 flipCode 的值小于0时,图像将在水平和垂直方向上同时进行翻转,即左右上下镜像。

    例子:

    1. Mat img_x,img_y,img_xy;
    2. flip(gray,img_x,0);//沿x轴对称
    3. flip(gray,img_y,1);//沿y轴对称
    4. flip(gray,img_xy,-1);//沿x轴对称,再沿y轴对称

     

        (img_x)                               (img_y)                    (img_xy)

    (3)图像拼接:hconcat() 和vconcat()

    图像拼接通常涉及将多个图像在水平或垂直方向上连接起来,创建一个更大的图像。使用 cv2.hconcat() 和 cv2.vconcat() 函数可以在水平和垂直方向上进行图像拼接。

    void cv::hconcat ( InputArray    src1,

    InputArray  src2,

    OutputArray dst

    void cv::vconcat ( InputArray  src1,

    InputArray  src2,

    OutputArray   dst

    • src1:第一个需要连接的Mat类矩阵。
    • src2:第二个需要连接的Mat类矩阵,与第一个参数具有相同的宽度、数据类型和通道数。
    • dst:连接后的Mat类矩阵。

    例子:

    1. //图像横向连接
    2. Mat imgh,imgv;
    3. hconcat(img_x,img_y,imgh);
    4. //图像竖向连接
    5. vconcat(img_x,img_y,imgv);

       

           (imgh)                                                                          (imgv)

  • 相关阅读:
    论文主要要点记录《Rethinking BiSeNet For Real-time Semantic Segmentation》
    高可用架构实现流量治理的策略
    Unirech腾讯云代充-通过VNC 登录腾讯云国际版Windows云服务器实例教程
    actuator--基础--07--自定义Endpoint
    (一)文件系统-ext4特性
    java毕业设计房屋合租系统Mybatis+系统+数据库+调试部署
    火山引擎云原生存储加速实践
    断网重连里面的长连接,短链接和心跳机制
    【零基础学QT】文章导航篇
    复数类。。
  • 原文地址:https://blog.csdn.net/weixin_63357306/article/details/132590345