JavaCV 图像灰度化处理
🧑 博主简介:历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
JavaCV 图像灰度化处理
一、引言
在计算机视觉和图像处理领域,图像灰度化是一项基础且重要的任务。它将彩色图像转换为灰度图像,去除了颜色信息,只保留了图像的亮度信息。这种转换在许多图像处理任务中具有重要意义,如图像边缘检测、图像特征提取等。JavaCV 是一个强大的开源库,它提供了对各种计算机视觉算法和图像处理操作的支持。本文将详细介绍如何使用 JavaCV 进行图像灰度化处理,包括相关的 Maven 依赖、原理讲解、代码示例以及实际效果展示。
二、JavaCV 简介
JavaCV 是一个基于 Java 的计算机视觉库,它封装了许多流行的计算机视觉库,如 OpenCV、FFmpeg 等。通过 JavaCV,开发者可以在 Java 环境中方便地进行图像处理、视频处理、计算机视觉算法等任务。它提供了丰富的 API,使得开发者可以轻松地进行图像的读取、写入、处理和显示等操作。
三、Maven 依赖
要在 Java 项目中使用 JavaCV,需要在项目的 pom.xml 文件中添加以下 Maven 依赖:
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.7</version>
</dependency>
这个依赖会自动引入 JavaCV 所需的所有库,包括 OpenCV 的 Java 绑定。
四、图像灰度化原理
(一)人眼对颜色的敏感度
人眼对不同颜色的敏感度是不同的。一般来说,人眼对绿色最为敏感,其次是红色,对蓝色最不敏感。这是因为人眼的视网膜中有三种不同类型的视锥细胞,分别对红、绿、蓝三种颜色敏感。这三种视锥细胞的响应曲线不同,导致人眼对不同颜色的敏感度不同。其中,对绿色敏感的视锥细胞数量最多,对蓝色敏感的视锥细胞数量最少。
这种敏感度的差异在图像灰度化中起着重要的作用。由于人眼对绿色的敏感度最高,因此在灰度化公式中,绿色的权重最大。同理,红色的权重次之,蓝色的权重最小。
(二)颜色通道与灰度值
彩色图像中的红(R)、绿(G)、蓝(B)三个颜色通道分别代表了不同的颜色信息。例如,在 RGB 颜色空间中,(255, 0, 0)表示纯红色,(0, 255, 0)表示纯绿色,(0, 0, 255)表示纯蓝色。而灰度图像只有一个通道,其灰度值范围通常为 0 到 255,0 表示黑色,255 表示白色,中间的数值表示不同程度的灰色。
彩色图像的每个像素由三个字节表示,分别对应 R、G、B 三个通道的值。而灰度图像的每个像素只需要一个字节来表示灰度值。通过将彩色图像转换为灰度图像,可以大大减少图像的数据量,从而提高图像处理的效率。
(三)加权平均公式
Gray = 0.299R + 0.587G + 0.114*B
这个加权平均公式是根据人眼对不同颜色的敏感度确定的。通过对彩色图像中的每个像素进行计算,将其 RGB 值转换为一个单一的灰度值,从而得到灰度图像。
例如,对于一个像素的 RGB 值为(100, 150, 200)
,根据加权平均公式计算其灰度值为:
Gray = 0.299 * 100 + 0.587 * 150 + 0.114 * 200 = 29.9 + 88.05 + 22.8 = 140.75
这个灰度值表示该像素在灰度图像中的亮度。通过对彩色图像中的每个像素进行这样的计算,可以得到整个灰度图像。
在实际应用中,这个加权平均公式被广泛应用于图像灰度化处理。它可以有效地保留图像的亮度信息,同时减少颜色信息的干扰,使得灰度图像更加适合于一些特定的图像处理任务,如边缘检测、特征提取等。
(四)JavaCV 中的实现
在 JavaCV 中,图像灰度化是通过对图像中的每个像素进行计算,将其 RGB 值转换为一个单一的灰度值来实现的。具体来说,JavaCV 提供了一个Mat
类来表示图像,每个像素在Mat
中由一个数组表示,数组的长度取决于图像的通道数。对于彩色图像,每个像素由三个通道组成,分别表示红、绿、蓝三个颜色通道的值。要进行灰度化处理,需要遍历图像中的每个像素,将其 RGB 值代入加权平均公式中,计算出灰度值,并将灰度值赋值给该像素的三个通道,使得该像素变为灰度像素。
也可以直接使用如下方法:
- 使用 JavaCV 的 Imgcodecs 类方便地读取彩色图像。
- 使用 JavaCV 的 Imgproc 类将彩色图像转换为灰度图像。
- 使用 JavaCV 的 Imgcodecs 类保存灰度图像。
五、图像代码Javacv代码示例
以下是一个使用 JavaCV 进行图像灰度化处理的完整代码示例:
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;public class ImageGrayingExample {public static void main(String[] args) {String imagePath = "path/to/your/color/image.jpg";// 读取彩色图像Mat colorImage = opencv_imgcodecs.imread(imagePath);if (colorImage.empty()) {System.out.println("无法读取图像");return;}Mat grayImage = new Mat();// 彩色图像转换为灰度opencv_imgproc.cvtColor(colorImage, grayImage, opencv_imgproc.COLOR_BGR2GRAY);String outputPath = "path/to/your/gray/image.jpg";// 保存灰度图像opencv_imgcodecs.imwrite(outputPath, grayImage);}
}
在上述代码中,首先使用opencv_imgcodecs.imread()
方法读取一个彩色图像。然后,创建一个与彩色图像大小相同的灰度图像。接着,使用opencv_imgproc.cvtColor(colorImage, grayImage, opencv_imgproc.COLOR_BGR2GRAY);
将彩色图像转换为灰度。最后,使用opencv_imgcodecs.imwrite()
方法保存灰度图像。
六、灰度图像效果展示
为了更好地展示图像灰度化的效果,我们选取了三张不同的彩色图像进行处理,并将处理前后的效果进行对比。
(一)万象更新成语图
彩色图像:
灰度图像:
从对比可以看出,彩色图像中的丰富颜色信息被去除,只保留了图像的亮度信息。在灰度图像中,物体的轮廓和形状更加清晰,这对于一些图像处理任务,如边缘检测和特征提取,是非常有帮助的。
(二)竹马之交成语图
彩色图像:
灰度图像:
这张图片在灰度化后,颜色的变化更加明显。原本鲜艳的竹林在灰度图像中变成了不同程度的灰色,但是竹林的形状和纹理依然清晰可见。
(三)狮子搏兔成语图
彩色图像:
灰度图像:
对于这张风景图片,灰度化处理后,天空、山脉和湖水的颜色都变成了灰色调。但是,图像中的层次感和细节依然保留,使得我们可以更专注于图像的结构和形状。
七、图像灰度化在图像边缘检测中的应用
(一)简化计算过程
在图像边缘检测中,灰度图像可以简化计算过程。因为灰度图像只有一个通道,而彩色图像有三个通道,所以在处理灰度图像时,计算量会大大减少。这使得边缘检测算法能够更快地运行,提高处理效率。
(二)减少颜色信息干扰
彩色图像中的颜色信息可能会对边缘检测算法产生干扰。例如,在某些情况下,颜色的变化可能会被误认为是边缘,从而导致误检测。而灰度图像只包含亮度信息,减少了颜色信息的干扰,使得边缘检测算法能够更准确地识别图像中的边缘。
以下是一个使用 JavaCV 进行图像边缘检测的代码示例,其中首先对彩色图像进行灰度化处理,然后再进行边缘检测:
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
import static org.bytedeco.opencv.global.opencv_core.CV_8UC1;public class ImageEdgeDetection {public static void main(String[] args) {// 读取彩色图像Mat colorImage = opencv_imgcodecs.imread("path/to/color/image.jpg");// 创建一个与彩色图像大小相同的灰度图像Mat grayImage = new Mat(colorImage.rows(), colorImage.cols(), CV_8UC1);// 遍历彩色图像中的每个像素,进行灰度化处理for (int i = 0; i < colorImage.rows(); i++) {for (int j = 0; j < colorImage.cols(); j++) {double[] pixel = colorImage.get(i, j);double blue = pixel[0];double green = pixel[1];double red = pixel[2];double grayValue = 0.299 * red + 0.587 * green + 0.114 * blue;grayImage.put(i, j, grayValue);}}// 进行边缘检测Mat edges = new Mat();opencv_imgproc.Canny(grayImage, edges, 50, 150);// 保存边缘检测后的图像opencv_imgcodecs.imwrite("path/to/edge/image.jpg", edges);}
}
在上述代码中,首先对彩色图像进行灰度化处理,得到灰度图像。然后,使用opencv_imgproc.Canny()
方法对灰度图像进行边缘检测,得到边缘图像。最后,保存边缘图像。
八、图像灰度化在图像特征提取中的应用
(一)提取图像的形状特征
在图像特征提取中,灰度图像可以用于提取图像的形状特征。例如,可以使用轮廓检测算法来检测灰度图像中的物体轮廓,从而提取出物体的形状特征。轮廓检测算法通常基于图像的梯度信息,而灰度图像的梯度信息更容易计算,因为它只有一个通道。
以下是一个使用 JavaCV 进行图像轮廓检测的代码示例:
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
import static org.bytedeco.opencv.global.opencv_core.CV_8UC1;public class ImageContourDetection {public static void main(String[] args) {// 读取彩色图像Mat colorImage = opencv_imgcodecs.imread("path/to/color/image.jpg");// 创建一个与彩色图像大小相同的灰度图像Mat grayImage = new Mat(colorImage.rows(), colorImage.cols(), CV_8UC1);// 遍历彩色图像中的每个像素,进行灰度化处理for (int i = 0; i < colorImage.rows(); i++) {for (int j = 0; j < colorImage.cols(); j++) {double[] pixel = colorImage.get(i, j);double blue = pixel[0];double green = pixel[1];double red = pixel[2];double grayValue = 0.299 * red + 0.587 * green + 0.114 * blue;grayImage.put(i, j, grayValue);}}// 进行轮廓检测Mat edges = new Mat();opencv_imgproc.Canny(grayImage, edges, 50, 150);Mat hierarchy = new Mat();Mat contours = new Mat();opencv_imgproc.findContours(edges, contours, hierarchy, opencv_imgproc.RETR_TREE, opencv_imgproc.CHAIN_APPROX_SIMPLE);// 在彩色图像上绘制轮廓opencv_imgproc.drawContours(colorImage, contours, -1, new org.bytedeco.opencv.opencv_core.Scalar(0, 255, 0), 2);// 保存带有轮廓的彩色图像opencv_imgcodecs.imwrite("path/to/contour/image.jpg", colorImage);}
}
在上述代码中,首先对彩色图像进行灰度化处理,得到灰度图像。然后,使用opencv_imgproc.Canny()
方法对灰度图像进行边缘检测,得到边缘图像。接着,使用opencv_imgproc.findContours()
方法在边缘图像上检测轮廓,得到轮廓信息。最后,在彩色图像上绘制轮廓,并保存带有轮廓的彩色图像。
(二)提取图像的纹理特征
灰度图像还可以用于提取图像的纹理特征。纹理特征是指图像中像素的灰度值在空间上的分布规律。可以使用一些纹理特征提取算法,如灰度共生矩阵、局部二值模式等,来提取灰度图像中的纹理特征。
以下是一个使用 JavaCV 进行图像纹理特征提取的代码示例(以灰度共生矩阵为例):
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
import static org.bytedeco.opencv.global.opencv_core.CV_8UC1;public class ImageTextureExtraction {public static void main(String[] args) {// 读取彩色图像Mat colorImage = opencv_imgcodecs.imread("path/to/color/image.jpg");// 创建一个与彩色图像大小相同的灰度图像Mat grayImage = new Mat(colorImage.rows(), colorImage.cols(), CV_8UC1);// 遍历彩色图像中的每个像素,进行灰度化处理for (int i = 0; i < colorImage.rows(); i++) {for (int j = 0; j < colorImage.cols(); j++) {double[] pixel = colorImage.get(i, j);double blue = pixel[0];double green = pixel[1];double red = pixel[2];double grayValue = 0.299 * red + 0.587 * green + 0.114 * blue;grayImage.put(i, j, grayValue);}}// 计算灰度共生矩阵int[][] glcm = new int[256][256];for (int i = 0; i < grayImage.rows(); i++) {for (int j = 0; j < grayImage.cols(); j++) {int pixelValue = (int) grayImage.get(i, j)[0];if (i < grayImage.rows() - 1 && j < grayImage.cols() - 1) {int nextPixelValue = (int) grayImage.get(i + 1, j + 1)[0];glcm[pixelValue][nextPixelValue]++;}}}// 计算纹理特征double contrast = 0;double energy = 0;double homogeneity = 0;for (int i = 0; i < 256; i++) {for (int j = 0; j < 256; j++) {contrast += (i - j) * (i - j) * glcm[i][j];energy += glcm[i][j] * glcm[i][j];homogeneity += glcm[i][j] / (1 + Math.abs(i - j));}}System.out.println("Contrast: " + contrast);System.out.println("Energy: " + energy);System.out.println("Homogeneity: " + homogeneity);}
}
在上述代码中,首先对彩色图像进行灰度化处理,得到灰度图像。然后,计算灰度图像的灰度共生矩阵。最后,根据灰度共生矩阵计算纹理特征,如对比度、能量和同质性。
九、总结
本文详细介绍了如何使用 JavaCV 进行图像灰度化处理。首先,介绍了 JavaCV 的简介和 Maven 依赖。然后,讲解了图像灰度化的原理,包括人眼对颜色的敏感度和加权平均公式。接着,给出了使用 JavaCV 进行图像灰度化处理的代码示例,并展示了处理前后的效果。最后,介绍了图像灰度化在图像边缘检测和图像特征提取中的应用。通过本文的学习,读者可以了解到图像灰度化的重要性和实现方法,为进一步的图像处理和计算机视觉任务打下基础。
十、参考资料文献
- JavaCV 官方文档
- OpenCV 官方文档
- 《数字图像处理》(第三版),冈萨雷斯等著
- 《计算机视觉:算法与应用》,Szeliski 著
相关文章:

JavaCV 图像灰度化处理
🧑 博主简介:历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,…...

基于Multisim三极管B放大系数放大倍数测量电路设计(含仿真和报告)
【全套资料.zip】三极管B放大系数放大倍数测量电路电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.用三个数码管显示B的大小,分别显示个位、十位和百位。 2.显示范围…...

Molmo模型实战
安装pip文件 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidiapip install ...

免费开源的微信开发框架
近年来,随着人工智能技术的快速发展,聊天机器人在各个领域得到了广泛的应用。在社交媒体中,自动回复成为了一个流行的功能,让用户可以方便地与机器人进行互动。gewe框架,一个开源的微信聊天机器人框架,实现…...

波形的变化和信号的产生1+multisim仿真
目录 1.正弦波振荡电路 1.1RC正弦波振荡电路 1.1.1RC串并联选频网络 1.1.2RC桥式正弦波振荡电路 1.1.4LC正弦波振荡电路 1.1.3石英晶体正弦波振荡电路 2.电压比较器 2.1概述 2.1.1基本概念 2.2电压比较器的种类 2.2.1过零比较器 2.2.2一般单限比较器 2.2.3滞回比较…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)
1.问题描述: compatibleSdkVersion升级到5.0.0(12)之后,调用坐标系转换API:map.convertCoordinate(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, { longitude: location.longitude, latitude:…...

电脑微信多开方法,保姆级教学,超简单!
文章目录 前言方法教学 前言 大家在日常生活中一般都会有多个微信号或QQ号,但大部分人只有一部手机和一台电脑,这就导致每次都需要来回切换不同的账号,非常麻烦;QQ还好,在电脑上可以登陆多个账号,但微信只能…...

【Mysql】-锁,行级锁
Mysql mysql中的行锁 在 MySQL 的 InnoDB 存储引擎中,行级锁通常是加在索引上的,而不是直接加在数据行上。这种机制是基于索引的锁定策略,具体来说: 主键索引:如果查询更新使用了主键进行查找,InnoDB 会直…...

手机功耗技术领域
手机功耗技术领域 器件 器件-电池 提升电池能量密度 提升正极电压、升级负极材料正极电压方面,目前行业还是以4.5V体系为主;4.53V体系预计24-25年落地;负极材料方面,石墨体系每年2%能量密度提升迭代; 掺硅方案目前…...

Golang | Leetcode Golang题解之第493题翻转对
题目: 题解: type fenwick struct {tree []int }func newFenwickTree(n int) fenwick {return fenwick{make([]int, n1)} }func (f fenwick) add(i int) {for ; i < len(f.tree); i i & -i {f.tree[i]} }func (f fenwick) sum(i int) (res int)…...

linux笔记(yum本地源仓库搭建)
一、准备工作 安装必要的软件包 在大多数 Linux 发行版中,Yum 已经默认安装。如果系统中没有安装,可以根据发行版的包管理器进行安装。 准备本地源文件 可以是光盘镜像(如果是从光盘安装系统),或者是已经下载好的系…...

K8S系列-Kubernetes网络
一、Kubernetes网络模型 Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中,不管它们是否运行在同一个Node(宿主机)中,都…...

Excel 对数据进行脱敏
身份证号脱敏:LEFT(A2,6)&REPT("*",6)&RIGHT(A2,6) 手机号脱敏:LEFT(B2,3)&REPT("*",5)&RIGHT(B2,3) 姓名脱敏:LEFT(C2,1)&REPT("*",1)&RIGHT(C2,1) 参考: excel匹配替换…...

OJ-1014田忌赛马
示例1: 输入 11 8 20 10 13 7 输出 1 示例2: 输入 11 12 20 10 13 7 输出 2 示例3: 输入 1 2 3 4 5 6 输出 6 解题思路: 问题的关键在于调整数组a的顺序,使得尽可能多的a[i] > b[i]。为了达到最优结果,我们可以采用贪心的策…...

Excel重新踩坑3:条件格式;基本公式运算符;公式中的单元格引用方式;公式菜单栏其他有用的功能说明;
0、前言:以下内容是学习excel公式的基础内容。 1、需求:将表格特定区域中数值大小大于等于30,小于等于80的单元格,颜色填充为红色,大于80的,颜色填充为黄色。 新建规则之后也可以通过该功能清除规则。 2、基…...

【AI知识点】FAISS如何提高检索效率?
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 FAISS(Facebook AI Similarity Search) 是一个高效的相似度搜索库,专门设计用于处理大规模的向量检索任务,尤其是在稠密向量的检索中表现出色。FAISS 能够显著提高检索效率…...

【Git】Gitlab进行merge request的时候,出现待合并分支合并了主分支的问题的解决
最近在公司开始用merge request进行代码合并了。 然后不知道为啥,如果待合并分支(A)进行merge request到主分支(B)的时候,如果A和B有冲突,然后我在gitlab上使用页面进行冲突的解决,比…...

jetson nano ubuntu20.04安装ros-Noetic
jetson nano ubuntu20.04 安装ros-Noetic 一. 初始准备nano连接wifinano网络配置二. 查看系统版本三. 开始安装1. 移除不需要的 amd64 架构2. 配置软件源3.安装 ROS Melodic`4. 解决 rosdep update报错`一. 初始准备 nano连接wifi nano网络配置 二. 查看系统版本 lsb_relea…...

【数据结构与算法】走进数据结构的“时间胶囊”——栈
大家好,我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…...

伺服增量式和绝对式的本质区别?
伺服增量式和绝对式的本质区别? 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。以转动时输出脉冲,通过计数设备来知道其位置,当编码器不动或停电时,…...

应对 .DevicData-X-XXXXXXXX 勒索病毒:防御与恢复策略
引言 随着信息技术的快速发展,网络安全问题愈发严峻。勒索病毒作为一种恶性网络攻击手段,已成为企业和个人面临的重大威胁之一。尤其是 .DevicData-X-XXXXXXXX 勒索病毒,其通过加密用户数据并勒索赎金,给受害者带来了巨大的经济损…...

【代码随想录——数组——二刷】
数组 1. 二分查找(704) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 1.1 二分法的第一种写法 我们定义 target 是在…...

spring-boot(4)
1.VueRouter安装与使用 2.状态管理VueX 3. 4. 5. 6....

深度学习模型:原理、架构与应用
深度学习(Deep Learning)是机器学习中的一个分支,基于人工神经网络的发展,尤其是多层神经网络的研究,使其在语音识别、图像处理、自然语言处理等领域取得了显著进展。深度学习的核心是通过大量数据的训练,学习到数据的内在结构和模式,并且具备自动从复杂的输入中提取特征…...

玩客云Armbian安装Casaos
#armbian安装docker apt install docker.io #armbian判断docker是否正常运行 systemctl status docker #查看版本 docker version #安装casaos方式一 wget -qO- https://get.casaos.io | bash #安装casaos方式二 curl -fsSL https://get.casaos.io | bash...

redis过期提醒
文章目录 redis过期提醒 redis过期提醒 有一次看redis的配置文件发现一个notify-keyspace-events配置,注释里边长篇大论的,那我得看看这是干啥的,看完注释内容,发现不得了了,redis竟然还有过期提醒的功能 接下来得大…...

AnaTraf | 提升网络性能:深入解析网络关键指标监控、TCP重传与TCP握手时间
AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在当今的数字化时代,网络的稳定性和性能对企业的运营效率至关重要。无论是内部通信、应用程序的运行,还是对外提供服务,网络都发挥着关键作用。对于网络工程师或IT运维人员…...

黑盒测试和白盒测试的具体方法(附加实际应用中的技巧和注意事项)
黑盒测试的具体方法 黑盒测试有多种具体的方法,以下是几种常见的黑盒测试技术: 等价类划分 定义:将输入数据划分为若干等价类,每个等价类中的数据被认为是等效的。目的:减少测试用例数量,同时覆盖所有可…...

基于ssm的小区物业管理系统
文未可获取一份本项目的java源码和数据库参考。 题目简介: 我国物权法的颁布以及经济的快速发展进一步提升了社区居民对物业服务和物业管理的要求,特别是对于社区安全、社区停车以及社区维修等各个方面提出了更为严格的要求。在这种背景下社区物业必须…...

4本SCI/SSCI期刊更名,10月WOS更新!速看!
期刊动态 2024年10月科睿唯安期刊目录更新 2024年10月22日,科睿唯安更新了WOS期刊目录,此次更新,期刊被编辑除名11本,停止出版1本,4本更名,停产1本,新增63本。 剔除期刊 11本期刊被剔 Enginee…...