
导读shell
OpenCV功能愈加强大,不学一下怎么行?数组
今天要分享这篇文章带咱们一块儿了解图像混合,并利用图像混合完成一些有趣的功能。让咱们走进这篇文章,一块儿来了解一下吧!微信
若是你有什么问题,或者有什么想法,欢迎评论与我一块儿沟通交流。若是你想了解更多有关于计算机视觉、OpenCV、机器学习、深度学习等相关技术的内容,想与更多大佬一块儿沟通,那就加群:326866692 或者扫描下方二维码加入咱们吧!机器学习

往期回顾ide
【OpenCV-YOLO v4实战】svg
1 | 尝鲜!Windows下实现YOLOv4物体检测学习
2 | 坐稳了,OpenCV老司机带你用OpenCV4实现YOLO v4物体检测区块链
【OpenCV基础教程】flex
1 | 01 OpenCV简介与安装
2 | 02 图像的读取与显示
3 | 03 图像的存储与窗口操做
4 | 04 视频的读取和显示
5 | 05 图像的结构、属性与坐标
6 | 06 图形与文字的绘制
7 | 07 鼠标控件基本操做
9 | 09 图像像素基本操做
1 图像混合
咱们有时候会将两幅图像混合到一块儿,获得一幅新的图像,不一样部分透明度不一样,就会产生不同的美感!
OpenCV中提供了图像混合的API,能够按权重加和,计算原理以下:
若是应用到图像中,咱们令输出图像为dst,两个输入图像分别为img1,img2,权重分别为α,β,咱们另外须要一个参数γ调整一下图像的亮度,γ大于0,图像变亮,图像小于0,图像变暗,后面咱们还会说明。
2 图像混合API
图像混合的API是 addWeighted ,该API实现的功能是:
计算两个数组(图像)的加权和。
API定义以下:
def addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
API参数含义以下:
(1)src1:第一个输入图像(2)alpha:第一个图像的参数(3)src2:第二个输入图像,图像的尺寸、深度必须和前一个输入图像一致(4)beta:第二个图像的参数(5)gamma:每一个和相加的附加标量(6)dst:输出图像(7)dtype:输出图像类型,默认为-1,即和两个输入图像一致。
dst能够不写在参数中,当作API的返回值传出,通常状况下,咱们也采用第二种方式,当返回值传出。
3 代码示例
举个例子:
# coding=utf-8
import cv.cv2 as cv
img1 = cv.imread('./image/YT_ZM.png')
img2 = cv.imread('./image/YT_ZWJ.png')
gamma = 0
dst = cv.addWeighted(img1, 0.5, img2, 0.5, gamma)
cv.imshow('new image',dst)
cv.waitKey(0)
cv.destroyAllWindows()
执行结果以下:
4 参数调整问题
调用OpenCV的API,其实就是调参的过程,在调整今天讲的API的参数的时候,咱们就要来讲明两个问题:
权重问题:两个图像的权重和是否必须为1?附加标量问题:附加标量是用来干吗的,不一样的取值,有什么不一样?
对于第一个问题,两幅图像所占权重之和不必定为1,若是不是1,也能够:
dst = cv.addWeighted(img1, 0.2, img2, 0.5, gamma)
执行结果以下:
可是通常来讲,权重之和越接近1,获得的图像效果越好。
对于第二个问题,gamma这个参数用来对混合后的图像明暗程度进行调整,有以下三种状况:
0:调亮图像,值越大,亮度越大;(2)gamma=0:不改变图像;(3)gamma<0:调按图像,值越小,亮度越小;
举个例子,咱们分别让gamma为:-100,0,100,执行结果以下:
gamma = -100
gamma = 0
gamma = 100
2 部分混合
若是咱们想要混合的图像大小不同,或者想要混合其中的某个部分,应该怎么办呢?
咱们能够先选定ROI区域,而后对ROI区域混合。
# coding=utf-8
import cv.cv2 as cv
img3 = cv.imread('./image/sign.png')
img4 = cv.imread('./image/opencv.png')
ROI = img3[50:50 + img4.shape[0], 50:50 + img4.shape[1]] # 获取ROI区域
dst = cv.addWeighted(ROI, 0.5, img4, 0.5, 0) # 图像融合
img3[50:50 + img4.shape[0], 50:50 + img4.shape[1]] = dst #附加到原图上
cv.imshow('new image',img3)
cv.waitKey(0)
cv.destroyAllWindows()
2 效果展现
执行结果以下:
3 模拟视频淡入淡出切换
作视频的时候,作两个视频或者图片的转换,须要经过淡入淡出转换,或者作PPT的时候,须要使用淡入淡出进行切换。
接下来,让咱们使用OpenCV实现下这个效果吧!
2 流程分析与代码编写
淡入淡出是一个动态效果,一幅图像的透明度由0逐渐转化为1,即由不透明转化为百分百透明;一幅图像的透明度由1逐渐转化为0,即由百分百透明转化为不透明。
咱们每进行一次调整透明度,就把图像输出一下。
# coding=utf-8
import cv.cv2 as cv
img5 = cv.imread('./image/YT_ZM1.png')
img6 = cv.imread('./image/YT_ZWJ1.png')
alpha = 0.0
while alpha <= 1:
dst = cv.addWeighted(img5, alpha, img6, 1-alpha, 0)
cv.imshow('new image', dst)
cv.waitKey(30)
alpha += 0.01
cv.destroyAllWindows()
3 效果展现
我把这个效果录成了视频:
你们也能够调整不一样的数值,看下效果。
说在后面的话
这篇文章到这里就要结束啦,但愿你们可以经过这篇文章,可以掌握图像混合的功能,掌握addWeighted的基本用法,能用addWeighted完成有趣的功能!
让咱们在后续的课程中,再接再砺,学习更多知识吧。
号外号外!
AI与区块链技术交流群
成立啦!
本群用于分享交流机器学习、深度学习、计算机视觉、OpenCV、PCL、TensorFlow、Pytorch等内容。
想要加群的朋友们扫描下方二维码添加群主微信,并备注【研究方向-地点-学校/公司-昵称】,

AI与区块链技术

长按二维码关注
若是喜欢这篇文章
麻烦给我一个在看
本文分享自微信公众号 - AI与区块链技术(Math_AI_Blockchain)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。