一、图片相加

要叠加两张图片,使用cv2.add(),相加两幅图片的形状(高度、宽度、通道数)必须相同。numpy中可以直接用res = img1 + img2相加。但是两者的结果并不相同

import cv2
import numpy as np
x = np.uint8([250])
y = np.uint8([10]) print(cv2.add(x, y)) # 250 + 10 = 260 => 255
print(x + y) # 250 + 10 = 260 % 256 = 4
[[255]]
[4]

如果是二值化图片(只有0和255两种值),两者结果是一样的。

二、图像混合

图像混合cv2.addWeighted()也是一种图片相加的操作,只不过两幅图片的权重不一样,γ相当于一个修正值:

dst = α × img1 + β × img2 + γ

img1 = cv2.imread('lena_small.jpg')
img2 = cv2.imread('opencv-logo-white.png') res = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
cv2.imshow('res', res)
cv2.waitKey(0)

当α和β都等于1时,就相当于图片相加

三、按位操作

如果将两幅图片直接相加会改变图片的颜色,如果用图像混合,则会改变图片的透明度,所以我们需要按位操作。首先需要了解一下掩膜(mask)这个概念

掩膜(mask):用一幅二值化图片对另外一幅图片进行局部遮挡,如下图:

实际上就是把原图中要放logo的区域抠出来,在把logo放进去就行了。

img1 = cv2.imread('lena.jpg')
img2 = cv2.imread('opencv-logo-white.png') # 把logo放在左上角,所以我们只关心这一块区域
rows, cols = img2.shape[:2]
roi = img1[:rows, :cols] # 创建掩膜
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask) # 保留除logo外的背景
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
dst = cv2.add(img1_bg, img2) # 进行融合
img1[:rows, :cols] = dst # 融合后放在原图上 cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.imwrite('dst.jpg', dst)

小结

1. cv2.add()用来叠加两幅图片,cv2.addWeighted()也是叠加两幅图片,但两幅图片的权重不一样

2. cv2.bitwise_and()cv2.bitwise_not()cv2.bitwise_or()cv2.bitwise_xor()分别按位与、非、或、异或运算。掩膜是用来对图片进行全局或局部的遮挡。

参考地址:https://tianchi.aliyun.com/course/courseConsole?courseId=40998&chapterIndex=1&sectionIndex=1

OpenCV-Python教程8-图像混合的更多相关文章

  1. OpenCV Python教程(1、图像的载入、显示和保存)

    原文地址:http://blog.csdn.net/sunny2038/article/details/9057415 转载请详细注明原作者及出处,谢谢! 本文是OpenCV  2 Computer ...

  2. OpenCV Python教程(3、直方图的计算与显示)

    转载请详细注明原作者及出处,谢谢! 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途什么的就直接略过去了. ...

  3. opencv基础教程 之 图像基础和绘图

    1,教程:感谢小强 2,用argparse传参数来显示一张图片 #!/usr/bin/python #linux系统 #coding=utf-8 import cv2 import argparse ...

  4. 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨)  ...

  5. Python下opencv使用笔记(图像频域滤波与傅里叶变换)

    Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654  收藏 展开 本文转载自  https://blog ...

  6. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  7. opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整

    http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...

  8. opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)

    ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...

  9. openCV - 5~7 图像混合、调整图像亮度与对比度、绘制形状与文字

    5. 图像混合 理论-线性混合操作.相关API(addWeighted) 理论-线性混合操作 用到的公式 (其中 α 的取值范围为0~1之间) 相关API(addWeighted) 参数1:输入图像M ...

  10. 【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间

    这篇随笔介绍使用OpenCV进行图像处理的第三章 色彩空间. 3  色彩空间 之前的介绍,大多是基于BGR色彩空间进行的,但针对不同的实际情况,研究人员提出了许多色彩空间,它们都有各自擅长处理的领域. ...

随机推荐

  1. tp5.0 SHOW COLUMNS FROM 生成数据表字段缓存

    TP5.0 生成数据表字段缓存 =控制台执行以下命令= 1.生成指定数据库的所有表字段缓存 php think optimize:schema --db databaseName 2.生成指定数据表的 ...

  2. dubbo源码分析14——DubboProtocol的export方法分析

    走到了这一步也挺不容易的,把之前的暴露入口代码再列出来回顾一下: //配置为none不暴露 if (! Constants.SCOPE_NONE.toString().equalsIgnoreCase ...

  3. 嵌入式系统C编程之堆栈回溯【转】

    转自:https://www.cnblogs.com/clover-toeic/p/3949896.html 前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况.一般可按需添加打印信息,以便 ...

  4. mac配置supervisor

    mac配置supervisor 安装 brew install supervisor 启动 一种是手动 supervisord -c /usr/local/etc/supervisord.ini 让s ...

  5. 二层环路保护,SEP多实例的配置

    作者:邓聪聪 智能以太保护SEP(Smart Ethernet Protection)是一种专用于以太网链路层的环网协议.SEP是一种以太环路保护机制,它通过有选择性地阻塞网络环路冗余链路,来达到消除 ...

  6. translate.py

    #!/usr/bin/python # -*- coding: UTF-8 -*- import xlrd import xlwt from xlutils.copy import copy impo ...

  7. php OpenSSL 加解密

    2018-1-6 17:10:19 星期六 $data = '123456'; $openssl_method = 'AES-256-CBC'; $openssl_iv_length = openss ...

  8. PHP超精简文章管理系统 Summer Article

    2017年3月8日 21:18:43 星期三 git: https://git.oschina.net/myDcool/article.git 截图:

  9. oracle 新增一条数据时设置id自增

    CREATE SEQUENCE test_seq    --创建一个test_seq序列INCREMENT BY 1   --每次加1START WITH 1     --从1开始NOMAXVALUE ...

  10. 手机CPU架构体系分类及各大厂商

    手机cpu相关知识,这对于开发Android应用程序适应各个机型有一定的辅助作用 . 手机cpu架构体系分类 指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86.A ...