关于如何用纯OpenCV实现图片叠加的例子实在是太少,太多的是使用 C++,JNI实现的,如果要用C++的话,我们为啥不转行做C++

下面的例子基于 Android JavaCV 实现了在im_beauty 美女图片上  添加im_flower3 小花图片 并显示

需要在res/drawable目录下 放两个文件 im_beauty, im_flower3 注意im_flower3一定要比im_beauty图片尺寸要下小



package com.KyleOpencvImageAdd;import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.core.Rect;import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private Mat mat1,mat2;private ImageView iv1,iv2;//用于显示两张图片叠加private ImageView iv3;private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化图片显示iv1=(ImageView)findViewById(R.id.imageView1);iv1.setImageResource(R.drawable.im_beauty);iv2=(ImageView)findViewById(R.id.imageView2);iv2.setImageResource(R.drawable.im_flower3);iv3=(ImageView)findViewById(R.id.imageView3);btn=(Button)findViewById(R.id.button1);btn.setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS:{Log.i("", "OpenCV loaded successfully");} break;default:{super.onManagerConnected(status);} break;}}};@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();//初始化函数库OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);}@Overridepublic void onClick(View arg0) {// 初始化数据mat1 = new Mat();mat2 = new Mat();Mat mat1Sub = new Mat();// 加载图片Bitmap bt1 = BitmapFactory.decodeResource(getResources(),R.drawable.im_beauty);Bitmap bt2 = BitmapFactory.decodeResource(getResources(),R.drawable.im_flower3);Bitmap bt3 = null;// 转换数据Utils.bitmapToMat(bt1, mat1);Utils.bitmapToMat(bt2, mat2);/** 方法一加权 高级方式 可实现水印效果*********/// mat1Sub=mat1.submat(0, mat2.rows(), 0, mat2.cols());// Core.addWeighted(mat1Sub, 1, mat2, 0.3, 0., mat1Sub);/** 方法二 求差 ********/// submat(y坐标, 图片2的高, x坐标,图片2的宽);// mat1Sub=mat1.submat(0, mat2.rows(), 0, mat2.cols());// mat2.copyTo(mat1Sub);/*** 方法三兴趣区域裁剪 **/// 定义感兴趣区域Rect(x坐标,y坐标,图片2的宽,图片2的高)Rect rec = new Rect(0, 0, mat2.cols(), mat2.rows());// submat(y坐标, 图片2的高, x坐标,图片2的宽);mat1Sub = mat1.submat(rec);mat2.copyTo(mat1Sub);//转化为android识别的图像数据注意bt3的宽高要和mat1一至bt3 = Bitmap.createBitmap(mat1.cols(), mat1.rows(), Config.RGB_565);Utils.matToBitmap(mat1, bt3);iv3.setImageBitmap(bt3);}}

处理上  bitmap  与mat 的 一定要注意 图片的宽高一致不然容易 Exception

/cv::error()(17079): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width ==

(uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file

/home/reports/ci/slave/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp, line 97

/org.opencv.android.Utils(17079): nMatToBitmap catched cv::Exception: /home/reports/ci/slave/50-

SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows &&

info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong,

jobject, jboolean)

Android OpenCV实现图片叠加,水印相关推荐

  1. [摘抄-Java-学习中]Java 图片叠加水印文字自动换行

    从网上找到了前辈们写的代码,然后优化整理下,实现了图片叠加水印,也就是文字叠加,然后再实现根据总文字的长度进行自动换行叠加文字 importjavax.imageio.ImageIO; importj ...

  2. android 涂鸦之图片叠加,android图像处理系列之七--图片涂鸦,水印-图片叠加...

    图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可.前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操 ...

  3. android:给图片打水印

    现在是维护知识产权的时代,很多时候app展示的图片会要求打上水印以强调自己对图片的知识产权.现在道长给大家分享一下给图片打水印的方法.额,这里道长已经写成一个简单的工具类.先把工具类的代码贴上: im ...

  4. c++调用opencv实现图片叠加以及添加水印效果

    前言 本篇文章参考了以下文章: https://blog.csdn.net/mars_xiaolei/article/details/78791133 https://answers.opencv.o ...

  5. Android OpenCV 3D图片智能识别

    原理简介 3D图片分为左右图和上下图,本程序的主要目的是将图片判断是左右图.上下图还是2D图片.原理采用灰度直方图匹配的方式,首先将图片分割为左右图,判断是否类似,然后将图片分割为上下图,判断是否类似 ...

  6. 第二节 opencv图片加水印

    通过opencv对图片加水印 (对规格不一样的图片进行叠加,局部叠加) ROI确定图片叠加区域 对图片进行灰度处理–黑化–白化,效果如下: 详细代码如下: # -*- coding:utf-8 -*- ...

  7. Shader学习12——简易图片叠加

    看到蛮牛有人想要两个带透明通道的图片叠加,就是最简单的纹理混合,想想其实实现起来应该很简单,但是搜了一下还真没搜到,这里简单实现一下,要求底图需要是不透明的: image.png image.png ...

  8. Android图片特效处理之图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  9. opencv 叠加两张图_OpenCV基础篇之图片叠加

    OpenCV基础篇之图片叠加 程序及分析 /* * FileName : blend.cpp * Author  : xiahouzuoxin @163.com * Version  : v1.0 * ...

最新文章

  1. Matlab图形绘制经典案例 (2)
  2. ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
  3. ES2017异步函数现已正式可用
  4. 产品原型设计的参考步骤
  5. linux查看进程详细信息top,linux查看系统进程信息命令 px,top详解
  6. python 新建文件 hdfs_python基础操作以及hdfs操作
  7. PAT乙级(1004 成绩排名)
  8. 方程组的直接解法和迭代法 python_最小二乘法及python 实现
  9. html 5新增技术,HTML5新增标签
  10. 嵌套地狱_解决嵌套业务逻辑_使用Js的对象_避免数组嵌套---SpringCloud Alibaba_若依微服务框架改造_ElementUI---工作笔记016
  11. php编译后漏掉一些参数怎么办
  12. M1系列Mac用U盘如何重装系统
  13. LVGL littlevgl使用
  14. excel 多行 取消隐藏_如何在Excel 2013中隐藏和取消隐藏行和列
  15. [IOI2018]组合动作——构造
  16. OSPF在NBMA网络中的五种模式
  17. img 图片 下边距 解决办法
  18. 基于.NET平台常用的框架整理
  19. Android11系统丨RK3568开发板运行第一个Android程序
  20. 凡科网站是php类型么,建网站?那要搞清楚网站类型

热门文章

  1. MRT(MODIS Reprojection Tool) 使用教程
  2. 学习笔记--深度学习入门--基于Pyrhon的理论与实现--[日]斋藤康毅 -- 持续更新中
  3. 嵌入式开发-STM32硬件SPI驱动TFT屏
  4. 零基础怎么学ps?写给新手朋友的一些经验
  5. 在运行makefile文件的时候遇到 /bin/sh: 1: XXXXX: not found问题解决
  6. ArcGIS统计每个行政区(村)内各种土地利用类型的总面积
  7. 三菱FX5U系统参数配置
  8. 【报错】could not acquire management access for administration MySQL不能登录
  9. 5分钟在浏览器中直接扫描并识别文字
  10. 图像处理中的投影变换(Perspective Transformation)