图像处理:数黑色格子-基于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

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(