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);
复制代码


效果图


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


相关文章
|
23天前
|
SQL Java 数据库连接
java使用jdbc操作数据库
java使用jdbc操作数据库
|
2月前
|
存储 Java 数据处理
|
9天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
【4月更文挑战第21天】本文介绍了Selenium中处理特殊测试场景的方法,如鼠标悬停。Selenium的Actions类提供了鼠标悬停功能,用于模拟用户在网页元素上的悬停行为。文中通过实例展示了如何使用Actions悬停并展开下拉菜单,以及在搜索时选择自动补全的字段。代码示例包括了打开百度首页,悬停在“更多”元素上显示下拉菜单并点击“音乐”,以及在搜索框输入关键词并自动补全的过程。
33 0
|
2天前
|
存储 NoSQL 安全
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
|
2天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
15 0
|
2天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(&lt;https://www.sojump.com/m/2792226.aspx/&gt;)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
10 0
|
2天前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之DataWorks在调用java sdk的createFile功能时报错com.aliyuncs.exceptions.ClientException: 1201111000 如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
9 1
|
3天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
11 0
|
4天前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
【4月更文挑战第25天】本文介绍了自动化测试中如何处理单选和多选按钮的操作,包括它们的定义、HTML代码示例以及如何判断和操作这些元素。文章通过一个简单的HTML页面展示了单选和多选框的示例,并提供了Java+Selenium实现的代码示例,演示了如何检查单选框是否选中以及如何进行全选操作。
11 0
|
6天前
|
Java
【java基础】File操作详解
【java基础】File操作详解
8 0