Opencv 图像叠加 添加水印

Opencv 图像叠加 添加水印

C++: void Mat::copyTo(OutputArray m) const
C++: void Mat::copyTo(OutputArray m, InputArray mask) const
这个函数可以复制图像到另一个图像或矩阵上,可选参数是掩码
由于叠加的图像大小不一定相等,比如我们这里把一张小照片加到一张大照片上
我们可以在大照片上设置一个和小照片一样大的感兴趣区域
不使用掩码的时候,我们载入一张png,和一张jpg

#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>

int main(){    cv::Mat image = cv::imread("E:/Image/Fruits.jpg");    cv::Mat logo = cv::imread("E:/logo.png");    cv::Mat imageROI;    imageROI = image(cv::Rect(10,10,logo.cols,logo.rows));    logo.copyTo(imageROI);    cv::namedWindow("result");    cv::imshow("result",image);    cv::waitKey();    return 0;}

原先在png里面是透明的地方,现在成了黑色,可见原来是透明的地方被认为是值0。
我们使用掩码来看看效果,掩码就使用png图片,掩码只能是一个通道的,我们载入灰度图像作为掩码

#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>

int main(){    cv::Mat image = cv::imread("E:/Image/Fruits.jpg");    cv::Mat logo = cv::imread("E:/logo.png");    cv::Mat mask = cv::imread("E:/logo.png",0);    cv::Mat imageROI;    imageROI = image(cv::Rect(10,10,logo.cols,logo.rows));    logo.copyTo(imageROI,mask);    cv::namedWindow("result");    cv::imshow("result",image);    cv::waitKey();    return 0;}

这样能看出差别了吧。
再来看看另一个函数
C++: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)
转换成数学表达式就是

#include <opencv2/highgui/highgui.hpp>#include <opencv2/core/core.hpp>

int main(){    cv::Mat image = cv::imread("E:/Image/Fruits.jpg");    cv::Mat logo = cv::imread("E:/logo.png");    cv::Mat imageROI;    imageROI = image(cv::Rect(10,10,logo.cols,logo.rows));    cv::addWeighted(imageROI, 1.0, logo, 0.3, 0, imageROI);    cv::namedWindow("result");    cv::imshow("result",image);    cv::waitKey();    return 0;}

动动手指,20元人民币立即到手
打豪车应用:uber详细攻略(附100元优惠码)
怎样注册uber司机 如何注册加入uber司机
怎么注册成为滴滴快车的司机?
腾讯内推【腾讯工作机会内推】

分类: opencv学习

时间: 2024-10-13 15:25:06

Opencv 图像叠加 添加水印的相关文章

【OpenCV入门教程之四】 ROI区域图像叠加&amp;初级图像混合 全剖析(转)

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20911629 作者:毛星云(浅墨)    邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.8 在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像

OpenCV图像的基础叠加

程序及分析 /* * FileName : blend.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Mon 28 Jul 2014 08:47:59 PM CST * Brief : * * Copyright (C) MICL,USTB */ #include <cv.h> #include <highgui.h> #include <stdio.h> using namespace s

[OpenCV] 4、图像叠加 addWeighted

>_<" 这次主要是图像叠加的基本操作: >_<" cv::addWeighted(imageROI, 1.0, logo, 0.6, 0, imageROI);即:目标像素=src1*alpha+src2*beta 1 #include <iostream> 2 #include <opencv2/highgui/highgui.hpp> 3 #include <opencv2/core/core.hpp> 4 5 usin

自制操作系统(十) 图像叠加处理

2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601  欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画,便可以实现叠加的效果.例如,屏幕背景+一个窗口+鼠标的情况. 例如下面的情形: 计算机桌面上有三个窗口程序,A.B.C.B位于A之上,C位于B之上.要实现这种效果,只需要,先画A(盖住了桌面一部分).再画B(盖住了A和桌面一部分).再画C(盖住了B和桌面一部分).然后每隔一定时间刷新画面即可. 为此引入一个图

opencv图像原地(不开辟新空间)顺时旋转90度

前一阵朋友碰到这么一道题:将图像原地顺时针旋转90度,不开辟新空间.此题看似平易(题目简短),仔细研究发现着实不容易.经过一番探索后,终于找到了正确的算法,但是当使用opencv实现时,有碰到了困难而且费了一番周折才找到问题所在. 首先,解决这个问题,先简化成原地90度旋转一M×N的矩阵A(注意不是N×N方阵).对于2×3的矩阵A = {1,2,3;4,5,6},其目标为矩阵B = {4,1;5,2;6,3}.因为是原地旋转,这里A和B应指向同一大小为6的内存空间. 这里有这样一个重要的导出公式

图像叠加,渐变,透明,水印原理

基本原理, 图像A,图像B,叠加后输出的图像C; Ci=Ai*a + (1-a)*Bi; i 表示第几个像素点; 对于32位的真色彩图像,存放格式有RGBA,ARGB,即4个通道; A即alpha通道值,即这样的图像可以用高8位或低8位(RGBA)来实现图像的透明程度, 0 <= a <= 1, 最小值为0,即完全透明,最大值为1,即不透明,全部显示; a值要与像素点中的每个通道的值进行相乘,得到新的像素点各通道值; 比如,0x80FFFF00是50%透明的黄色,0x80是128,大约是255

OpenCV &mdash;&mdash; 图像局部与部分分割(一)

背景减除 一旦背景模型建立,将背景模型和当前的图像进行比较,然后减去这些已知的背景信息,则剩下的目标物大致就是所求的前景目标了 缺点 -- 该方法基于一个不长成立的假设:所有像素点是独立的 场景建模 新的前景(物体移动的新位置) -- 旧的前景 (物体离开后留下的"空洞")-- 背景 cvInitLineIterator()  和  CV_NEXT_LINE_POINT() 对任意直线上的像素进行采样 // 从视频的一行中读出所有像素的RGB值,收集这些数值并将其分成三个文件 #inc

Atitti 图像处理 图像混合 图像叠加&#160;blend 原理与实现

Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不仅用于广泛使用的Photoshop中,也应用于AfterEffect.llustrator . Dreamweaver. Fireworks等软件.主要功效是可以用不同的方法将对象颜色与底层对象的颜色混合.当您将一种混合模式应用于某一对象时,在此对象的图层或组下方的任何对象上都可看到混合模式的效果.

ROI区域图像叠加&amp;初级图像混合 综合实例

将addWeighted函数与ROI函数封装到ROI_LinearBlending中 //---------------------------------[ROI_LinearBlending()]------------------------------------- // 函数名:ROI_LinearBlending() // 描述:线性混合实现函数,指定区域线性图像混合.利用cv::addWeighted()函数结合定义 // 感兴趣区域ROI,实现自定义区域的线性混合 //-----