python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

作者:笔岸柳影 时间:2021-10-15 16:40:52 

目录
  • 图像边框的实现

    • 图像边框设计的主要函数

  • 图像混合的实现

    • 图像混合实现的主要函数

  • 主要思路

    图像边框的实现

    图像边框设计的主要函数

    cv.copyMakeBorder()——实现边框填充
    主要参数如下:

    • 参数一:源图像——如:读取的img

    • 参数二——参数五分别是:上下左右边的宽度——单位:像素

    • 参数六:边框类型:

    • cv.BORDER_CONSTANT——cv.BORDER_REPLICATE——cv.BORDER_REFLECT——cv.BORDER_WRAP——cv.BORDER_REFLECT_101——cv.BORDER_TRANSPARENT——cv.BORDER_REFLECT101——cv.BORDER_DEFAULT——cv.BORDER_ISOLATED

    • 参数七——只在边框类型选择borderType == BORDER_CONSTANT,才设置,意为边框值

    边框类型的说明:

    • BORDER_CONSTANT:意为添加指定颜色的边框——由value值确定:为list

    • 其它参数:(可根据需要调制,不过一般前两个用的多一些)

    代码实例


    import cv2 as cv
    import numpy as np
    if __name__ == "__main__":
    img = cv.imread('./imag_in_save/open_class.png')
    cv.namedWindow('imag', cv.WINDOW_NORMAL)
    cv.resizeWindow('imag', 500, 500)
    img = cv.copyMakeBorder(img, 20, 20, 20, 20, cv.BORDER_CONSTANT, value=[2, 83, 13]) # 添加边框
    cv.imshow('imag', img)
    cv.waitKey(0)
    cv.destroyAllWindows()

    效果

    python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    图像混合的实现

    图像混合实现的主要函数

    cv.addWeighted()——实现图像的混合
    它的工作原理采用的是一个简单权重公式:g(x)=(1−α)f0(x)+αf1(x)

    • 第一个参数为一张图象,紧跟着第二个参数为第一张图片的权重(0~1)也就是公式里的(1 - α)

    • 第三个参数为另一张需要混合的图片,同样的,第四个参数为这张图片的权重,也就是公式里的(α)

    • 至于第五个参数:每个对应标量的和值——可以设置混合的高光

    • 其它两个参数:(最后的一个参数单独用的不是很多,在一些其他处理中用的比较多)

    • dst 输出数组,其大小和通道数与输入数组相同(我们一般通过直接返回得到~)

    • dtype 输出数组的可选深度;当两个输入数组的深度相同时,可以将dtype设置为-1,这等效于src1.depth()

    代码实例


    import cv2 as cv
    import numpy as np

    if __name__ == "__main__":
    img1 = cv.imread(r'./2.png', 1) # 读取彩 * 片
    img2 = cv.imread(r'./3.png', 1)
    cv.namedWindow('imag', cv.WINDOW_NORMAL) # 窗体
    img1 = img1[0: 200, 0: 400] # 截取图像的指定部分——因为图像混合需要等大的图像
    img2 = img2[0: 200, 0: 400]
    img = cv.addWeighted(img1, 0.7, img2, 0.3, 0) # 混合图片——根据权重

    while True:
    cv.imshow('imag', img) # 显示当前序列号图片
    k = cv.waitKey(0) & 0xFF
    if k == 27:
     break
    cv.destroyAllWindows()

    效果

    python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    小练习(产生类似幻灯片渐变的效果)

    主要思路

    • 首先准备好一系列等大的图片或者截取一系列相同大小的图片区域作为我们的图像数据

    • 然后将图像信息,分别拼接到一个list列表中

    • 然后,实现一张一张图片的显示,在交换的间隙,实现渐变的效果——也就是图像混合。

    • 然后就可以欣赏了——不过效果的话,主要看设置的参数吧(当然因为没有渲染,可能还是有些僵硬)。

    代码示例

    我把主要注释放在代码中,边看边理解应该不难~


    import cv2 as cv
    import numpy as np

    if __name__ == "__main__":
    img_list = [] # 创建一个空序列装准备显示的一系列图片
    counts = 0 # 显示图片的序号
    cv.namedWindow('imag', cv.WINDOW_NORMAL) # 窗体
    cv.resizeWindow('imag', 500, 500)
    for i in range(2, 7): # 遍历图片,凭借到空数组中——一共5张
    img = cv.imread(f'./imag_in_save/scr/{i}.png') # 用f""实现参数传入
    img = img[0: 200, 0: 400] # 截取图像的指定部分——因为图像混合需要等大的图像
    img_list.append(img) # 实现图片添加
    while True:
    cv.imshow('imag', img_list[counts]) # 显示当前序列号图片
    k = cv.waitKey(2000) & 0xFF
    counts += 1 # 循环下一张图片——0,1,2,3,4有效
    if counts == 5: # 循环到最后一张图片后返回到第一张图片
     counts = 0
    for i in range(0, 10):
     k_f = cv.addWeighted(img_list[counts - 1], 1 - (i * 0.1), img_list[counts], i * 0.1, 0) # 做类似渐变的图像合成
     # 实现两张(当前图片和接下来显示的图片)图片,不同权重的混合——由于照片权重改变来实现渐变
     cv.imshow('imag', k_f) # 显示混合的图片
     k = cv.waitKey(120) & 0xFF # 延时和按键读取
     if k == 27: # ESC键
     break
    if k == 27:
     break
    cv.destroyAllWindows()

    效果(图片可能不是很明显,如有需要可以自己添置几张图片实现看看)

    python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
    python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    来源:https://blog.csdn.net/weixin_44604887/article/details/104738895

    标签:opencv,图像,边框,填充,混合
    0
    投稿

    猜你喜欢

  • 用Dreamweaver 4.0编制会议通知

    2010-10-20 20:06:00
  • Python利用matplotlib绘制折线图的新手教程

    2021-08-18 18:00:01
  • 中国传统色彩名录

    2007-11-29 18:36:00
  • numpy np.newaxis 的实用分享

    2023-01-21 06:06:25
  • asp如何准确获知对方来访问的时间和URL?

    2010-07-07 12:25:00
  • Python入门教程(八)PythonCasting用法

    2021-11-14 02:20:41
  • python一行输入n个数据问题

    2023-09-11 21:50:48
  • Python中elasticsearch插入和更新数据的实现方法

    2023-02-25 02:14:20
  • python的几种开发工具介绍

    2021-09-28 01:54:44
  • Python 树表查找(二叉排序树、平衡二叉树)

    2021-01-27 03:06:20
  • Python中win32com模块的使用

    2021-01-22 11:46:52
  • javascript基础之indexOf函数

    2008-06-25 13:28:00
  • 一些关于SQL2005+ASP.NET2.0的问题

    2007-09-23 13:01:00
  • 一些需要禁用的PHP危险函数(disable_functions)

    2023-11-23 15:29:25
  • Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例

    2021-04-16 10:50:05
  • 如何使用Script Encoder?

    2010-06-05 12:42:00
  • pygame游戏之旅 添加碰撞效果的方法

    2022-11-04 06:45:46
  • python:关于文件加载及处理方式

    2021-03-12 10:17:30
  • python文件路径操作方法总结

    2023-04-30 21:00:15
  • 从Python的源码来解析Python下的freeblock

    2023-07-26 20:44:39
  • asp之家 网络编程 m.aspxhome.com