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()
效果
图像混合的实现
图像混合实现的主要函数
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()
效果
小练习(产生类似幻灯片渐变的效果)
主要思路
首先准备好一系列等大的图片或者截取一系列相同大小的图片区域作为我们的图像数据
然后将图像信息,分别拼接到一个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()
效果(图片可能不是很明显,如有需要可以自己添置几张图片实现看看)
来源:https://blog.csdn.net/weixin_44604887/article/details/104738895


猜你喜欢
- 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息,一般来说,Python爬虫程序很多时候都要使用(飞猪IP)代理的IP
- 只能远程协助的方式。我特意做了一个脚本,用电话指导客户在SSMS里执行一下脚本就可以了1.0的数据库跟1.1的数据库的区别是1.1的数据库里
- 对于日志的处理,有时候需要把符合条件的日志计入数据库中一、添加pom依赖 <dependency> &
- 很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴。matplotlib和se
- 栈(stack)栈又称之为堆栈是一个特殊的有序表,其插入和删除操作都在栈顶进行操作,并且按照先进后出,后进先出的规则进行运作。如下图所示例如
- SQL Server 2005附加数据库文件时出现了Read-Only错误,附加的时候,系统提示mdf文件为只读,可是打开文件属性,这个属性
- 人常常感受到色彩对自己心理的影响,这些影响总是在不知不觉中发挥作用,左右我们的情绪。色彩的心理效应发生在不同层次中。有些属直接的刺激,有些要
- 今天在百度知道看php相关资料时发现一个网友问一个wordpress安装提示错误的一个问题,说他在安装wordpress安装包时遇到这样一个
- 需求细化:1.身份证必须能够通过身份证校验程序。2.通过查询,发现身份证号码是有国家标准的,标准号为 GB 11643-1999 可以从百度
- AnacondaNavigator Jupyter Notebook更换Python内核 前言为什么要换呢,因为新安装的Anaco
- 1、合并列表(extend)跟元组一样,用加号(+)将两个列表加起来即可实现合并:In [1]: x=list(range(1, 13, 2
- 需求描述项目首先要用户选择某个问题,选择之后使用ElementUI的Notification组件提示用户正在对文件格式进行检查(需要先提交给
- js监听浏览器回车事件,可以支持ie6+,火狐,谷歌等浏览器。<html><head><script type
- 使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现
- 这些日子,几乎每个人都在谈论XML (Extensible Markup Language),但是很少有人真正理解其含义。XML的推崇者认为
- 思考:当我们输入这个语句的时候,Python内部是如何去创建这个对象的?a = 1.0对象使用完毕,销毁的时机又是怎么确定的呢?下面,我们以
- 1.介绍在 Golang 语言项目开发中,经常会遇到数据排序问题。Golang 语言标准库 sort 包,为我们提供了数据排序的功能,我们可
- 本文实例讲述了python实现修改固定模式的字符串内容操作。分享给大家供大家参考,具体如下:说明字符串模式是开头可能有空格,之后可能存在多个
- 前言面对计算密集型的任务,除了多进程,就是分布式计算,如何用 Python 实现分布式计算呢?今天分享一个很简单的方法,那就是借助于 Ray
- 一、 [::-1]import numpy as npimport numpy as npx = np.arange(1, 6)print(