Java调用opencv证件照二值化操作

简介: Java调用opencv证件照二值化操作

1.为什么要说证件照



因为证件照的背景颜色是固定的,或者背景颜色大致是一致的有些深浅区别
复制代码


2.上篇文章介绍了聚类函数的用法



网络异常,图片无法展示
|


通过聚类函数分类会对照片的相同或者接近的颜色进行分类,标记为不同的颜色。
  图片背景颜色被分类为统一的颜色。
  那么分类后如何实现二值化(其实就是黑白照片)?
  1.第一种方法是根据聚类函数:
    首先提取背景图片的某个像素点,然后根据聚类函数生成的图片对这个像素点的一个匹配度,如果相同则填充白色,如果不相同就填充黑色
  2.第二种方法是手动确定背景颜色区分的
    Imgproc.cvtColor
    Core.inRange
复制代码


3.聚类代码实现例子



// 背景与人物二值化,注意单通道
Mat mask=new Mat(image.size(),CvType.CV_8UC1);
int bindex = (int)bestLabels.get(0,0)[0];//获得kmeans后背景的标签
double array2[]= {0,0,0};//黑色
double array[]= {255,255,255};//白色
Mat dst=image.clone();
for (int i = 0; i < height; i++) {
  for (int j = 0; j < width; j++) {
    index = i*width + j;
    double label = (int)bestLabels.get(index,0)[0];
    if (label-bindex==0) {
      mask.put(i, j,array);
    }else {
      mask.put(i, j,array2);
    }
  }
}
HighGui.imshow("mask", mask);
复制代码


效果


网络异常,图片无法展示
|


4.另一种方法inRange



Mat zeroImage=new Mat();
Mat close=new Mat();
//转换为hsv的单通道
Imgproc.cvtColor(image, zeroImage, Imgproc.COLOR_RGB2HSV);
HighGui.imshow("cvtColor", zeroImage);
//高、低阈值范围之内,则在zeroImage图像中令该像素值为255 白色,否则令其为0黑色
//Scalar是具有三个参数的结构体,三个参数代表 hsv的色相,饱和度,亮度值
//这里需要自己调节scallar值
Core.inRange(zeroImage, new Scalar( 10, 40, 45), new Scalar( 95, 255, 255), close);
HighGui.imshow("close", close);
复制代码


效果图


网络异常,图片无法展示
|


相关文章
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
344 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
4月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
5月前
|
存储 Java
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
128 0
|
5月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
82 0
|
4月前
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
51 4
|
4月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
4月前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
4月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
5月前
|
Java
使用kafka-clients操作数据(java)
使用kafka-clients操作数据(java)
下一篇
无影云桌面