原图:

背景:

最终效果:

代码:

package com.machao;import com.machao.util.OpenCvUtils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Rect;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;import java.io.File;
import java.io.FilenameFilter;public  class  Picture extends OpenCvUtils {public  static  void  main(String[] args) {Long begin = System.currentTimeMillis();String path = "F:\\opencv_test\\back";File file =  new  File(path);String[] files = file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return name.toLowerCase().endsWith("jpg");}});Mat src,logo = null;for (String s : files) {System.out.println("处理中:" + s);// 获取背景图片src = Imgcodecs.imread("F:\\opencv_test\\bg_img\\back1.png", 1);// 读取需要处理的原图logo = Imgcodecs.imread(path + "//" + s,1);// 将文本原图二值处理,让文本不出现灰白色,不需要则注释Imgproc.threshold(logo,logo, 140, 255, Imgproc.THRESH_BINARY);// 设置图片背景setBackground(src, logo, s);}Long end = System.currentTimeMillis();System.out.println("处理完成,共耗时:"+((end-begin)/1000.0)+"s,平均每张图片耗时:"+((end-begin)/files.length/1000.0)+"/s");
//        JOptionPane.showMessageDialog( null ,  "转换完成!" );}/*** 设置图片背景* @param src 背景图片* @param logo 当前图片* @param name 图片名称*/public static void setBackground(Mat src, Mat logo, String name){Mat mask = null;// 将背景大小重置为logo大小Imgproc.resize(src,src,logo.size());mask = logo.clone();Mat imgROI = src.submat(new Rect(0, 0, logo.cols(), logo.rows()));  //Rect方法定义ROI,注意宽是:cols;高是rows。Core.bitwise_not(mask, mask);//对mask图像取反,白色(255)变成黑色(0)
//        Imgproc.threshold(mask,mask, 80, 255, Imgproc.THRESH_BINARY);//对mask进行二值化,threshold处理彩色图是将rgb3值分别按照灰度值分割,只保留纯色
//        Imgcodecs.imwrite("F:\\opencv_test\\back\\"+name.substring(0,name.indexOf("."))+"-mask.jpg", mask);logo.copyTo(imgROI, mask);//将logo拷贝到imgROI上,rgb为不为0的部分保留,为0的被置换为目标图的rgbImgcodecs.imwrite("F:\\opencv_test\\back\\"+name.substring(0,name.indexOf("."))+"-result.jpg", src);// 电脑垃圾,手动gc一下System.gc();}
}
package com.machao.util;import com.machao.TextAreaFind;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.springframework.util.ResourceUtils;import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;/*** * @类功能说明: openCv公共方法操作类型* * @作者:mayiwen* @创建时间:2019年10月16日 下午3:06:52 @版本:V1.0*/
public class OpenCvUtils{/*** 加载动态库*/public static void loadLibraries() {try {String osName = System.getProperty("os.name");String opencvpath = "dll/";// windowsif (osName.startsWith("Windows")) {
//              int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
//              // 32位系统
//              if (bitness == 32) {
//                  opencvpath += "opencv_java320_x86.dll";
//              }
//              // 64位系统
//              else if (bitness == 64) {opencvpath += "opencv_java412.dll";
//              } else {
//                  opencvpath += "opencv_java320_x64.dll";
//              }}File dll = ResourceUtils.getFile("classpath:"+opencvpath);opencvpath = dll.getAbsolutePath();System.load(opencvpath);} catch (Exception e) {throw new RuntimeException("Failed to load opencv native library", e);}}static {// 加载动态库loadLibraries();}}

java+opencv修改白色背景为图片相关推荐

  1. mat opencv 修改roi_设置图片ROI(OpenCV学习笔记之二)

    ROI相关简介 ROI是什么 ROI是region of interest首字母的简写,翻译为感性趣的区域.其实在写本篇之前应该写一篇关于图片是什么的学习笔记,但又感觉里面没多少东西还不能承载一篇学习 ...

  2. java代码修改数据库里图片_java如何修改sql存储的图片?

    展开全部 :获取数据库连接 1:导入mysql的驱动jar包,mysql-connector-java-5.1.8-bin.jar 2:写代码连接数据库,如下323131333532363134313 ...

  3. java opencv 打开摄像头截取图片

    先到官网下载 https://opencv.org/releases/ 我的是windows 版 下载好后打开自动解压,opencv文件夹,打开里面的build\java,将opencv-460.ja ...

  4. java JFrame修改左上角的图片

    直接案例: 转载于:https://www.cnblogs.com/yichjin/p/5647248.html

  5. Android 10.0 修改Recovery字体图片的大小(正在清理)文字大小

    1.概述 在10.0系统产品开发中,进行Recovery 恢复出厂设置时 发现 真正清理的 字体小了 产品不满意 所以要求改大一点字体 于是 就只能去看Recovery部分的源码 这部分都是C 语言的 ...

  6. java opencv 实现换脸

    最近碰到个项目,要求是实现人脸交换,即如下图所示,将右边汤唯的脸换成左边鹿晗的脸,变成中间的照片,就是人脸交换. 网上一般都是基于opencv和Dlib来实现,且多为c++或python语言,或app ...

  7. Atitit Java OpenCV 捕获视频

    Atitit Java  OpenCV 捕获视频 ,打开一段视频或默认的摄像头 有两种方法,一种是在定义类的时候,一种是用open()方法. 一. 读取视频序列 OpenCV提供了一个简便易用的框架以 ...

  8. java中文件处理之图片_在Java 7中处理文件

    java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...

  9. java盒图_java合成图片

    package com.pbids.sanqin.util; import javax.imageio.ImageIO; import java.awt.*; import java.awt.imag ...

最新文章

  1. linux下如何察看哪个进程在写硬盘
  2. Android--Matrix图片变换处理
  3. TCP/IP报文格式
  4. (原創) 如何讓P7010外接螢幕支援1440x900(WXGA+)? (NB) (P7010)
  5. 源码WIFI--扫描和连接
  6. matlab通过“ideal_lp设计理想高通滤波器_常见低通、高通、带通三种滤波器的工作原理...
  7. python爬虫实训心得_Python爬虫小结
  8. mysql 出现错误 Duplicate entry for key PRIMARY 解决办法
  9. Git中的bash与CMD的区别
  10. go error的理解
  11. Java虚拟机专题之class文件结构(读书笔记)
  12. mysql字段里面有16字节特殊字符替换
  13. Enigma密码机初步解析
  14. java 按 大写字母_用大写字母拆分字符串
  15. mysql如何防止幻读
  16. Java基础视频教程(2020年最新)
  17. Linux之日志服务及管理
  18. 简述 Spring Bean的生命周期
  19. CyclicBarrier---JDK1.8源码分析
  20. 原生JS获取QQ好友列表

热门文章

  1. [蓝桥杯单片机] - 蓝桥杯单片机CT107D竞赛板各模块代码分析
  2. centos8开放3306端口
  3. linux虚拟内存结构
  4. 机器学习和深度学习概述
  5. 负数的二进制表示方法
  6. 科目一:信息系统综合知识——4.嵌入式技术
  7. 1018 锤子剪刀布 C版本
  8. DevExpress VCL v17.2.7全新发布|附下载
  9. flask_很好用的一款web框架
  10. C语言---冒泡排序法