图像处理:数黑色格子-基于Java语言的open cv应用

2024-03-29 02:48

本文主要是介绍图像处理:数黑色格子-基于Java语言的open cv应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像处理:数黑色格子-基于Java语言的open cv应用

  • 1.实验要求
  • 2.实验步骤
  • 3.有参考意义的书籍
  • 4.实验心得

这是本学期我们开设的专业实训课程的作业,任务要求主要是实现:完成一幅方块图像的打开和显示,并统计其中的黑色方块数量,现在特把其完成过程中的心得进行整理。

1.实验要求

  • 能够读取任何格式的图片文件
  • 能读取出来该图片文件的像素点
  • 能对图片进行二值化和灰度化的预处理,进而提高角点检测的精确度
  • 将图片转换为0/1矩阵
  • 实现数黑色格子的功能

2.实验步骤

1.图片的处理

对图片的处理首先是要实现能够读取各个格式的图片文件,然后就是要分析像素点数据,对图片进行颜色识别,之后将图片转换为0/1矩阵,如果是基于open cv,那么就可以在灰度化以及二值化的处理过后,将图片变成只有黑白的数据,然后对处理后得到的图片进行角点检测从而便于之后的数黑色方块的算法实现,具体流程如下图所示:

在这里插入图片描述
2.数黑格子以及图片的显示
这一版块主要要实现数格子的算法实现并将结果以及图片借助Swing显现出来 ,具体流程如下图所示:
在这里插入图片描述

3.有参考意义的书籍

Java API
《数字图像处理:Java语言算法描述》-清华大学出版社
《Java核心技术I卷》-机械工业出版社
《王者归来:OpenCV3Java使用开发手册》

4.实验心得

1.如何解决正确读取不同格式的图片,如:JPEG、PNG、BMP等?
我们采用的解决办法是使用ImageIO类,因为它会根据文件的扩展名和开头的“幻数”,选择一个合适的读取器

2.用getRGB(i,j)获取颜色值并将其打印输出发现不是常见的RGB三原色格式,解决办法:
查询getRGB(i,j)发现其输出的颜色值是ARGB,但其实在实际应用中我们使用的是RGB,所以我们使用& 0xFF的操作将ARGB转化成RGB,即bufImg.getRGB(i, j) & 0xFF

3.在使用open cv的时候,程序报错:java.lang.UnsatisfiedLinkError,解决办法:
程序开始第一行加上:System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
原来使用open cv必须要首先加载open cv所需要的dll文件。

4.我们想使用open cv里的Highgui包将角点检测的结果直接窗体显现出来,但是一直显示引入失败
原因:OpenCV-3.0版本的库中没有opencv.highgui.Highgui这个包了,而且imshow(Mat m, string window)这个方法在Java中被舍去掉了
解决办法:重新去open cv的官网下载4.0.0以上的版本,并且重新搭建jar包

5.在使用open cv的方向去写的时候,打印输出转换的0/1矩阵,发现个别像素点存在着差错,一堆1里面出来了个别的0,解决办法:
对其进行降噪,降噪的作用就是在出现一堆黑点里面有极个别的白点,它会将白色的也改为黑色的。

这篇关于图像处理:数黑色格子-基于Java语言的open cv应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857401

相关文章

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

java导出pdf文件的详细实现方法

《java导出pdf文件的详细实现方法》:本文主要介绍java导出pdf文件的详细实现方法,包括制作模板、获取中文字体文件、实现后端服务以及前端发起请求并生成下载链接,需要的朋友可以参考下... 目录使用注意点包含内容1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接使

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente