1、设计方法为:
- 首先将两个图片转化为灰度图;
- 进行灰度图比对,1为完全相同,此处可以插入阀值;
- 计算两个灰度图的绝对差值并放入一个新的Mat对象;
- 将新的mat对象进行绝对差值化;
- 寻找轮廓图并用红色进行标记;
- 输出到新图片中(带有标记的图片);
2、难点说明:
- 读取图片时,OpenCV默认不支持中文图片路径,故需要用其他方法来进行,参考https://blog.csdn.net/wangyulj/article/details/79058390里描述的方法来解决该问题,具体代码见代码块中的方法readMat;
- 由于为中文路径,故使用OpenCV自带的写出图片方法会导致代码运行无异常,但是无法输出图片,故更换使用ImageIO中的方法来写出图片,代码见方法writeImage;
3、代码块如下所示
package com.dff.test
import java.awt.HeadlessException
import java.awt.image.BufferedImage
import java.io.ByteArrayInputStream
import java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.io.InputStream
import java.io.UnsupportedEncodingException
import java.util.ArrayList
import java.util.List
import javax.imageio.ImageIO
import org.opencv.core.Core
import org.opencv.core.CvType
import org.opencv.core.Mat
import org.opencv.core.MatOfByte
import org.opencv.core.MatOfPoint