在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
在Android应用中,判断一张图片中“消息体”的大小,可以通过图像处理技术来实现。主要的步骤包括:将图像转换为灰度图,进行二值化处理,接着使用轮廓检测或边缘检测来识别消息体的边界,最后计算消息体的大小。
下面是一个通过轮廓检测来识别图片中的消息体并计算其大小的完整Java代码示例,附带中文注释:
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import android.graphics.Bitmap;
import android.util.Log;import java.util.ArrayList;
import java.util.List;public class MessageBodyDetector {/*** 检测图片中的消息体并计算其大小* @param bitmap 输入的原始图片* @return 消息体的面积(像素数)*/public static double detectMessageBodySize(Bitmap bitmap) {// 将Bitmap转换为OpenCV的Mat对象Mat src = new Mat();Utils.bitmapToMat(bitmap, src);// 转换为灰度图Mat gray = new Mat();Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);// 对图像进行二值化处理Mat binary = new Mat();Imgproc.threshold(gray, binary, 128, 255, Imgproc.THRESH_BINARY);// 寻找轮廓List<MatOfPoint> contours = new ArrayList<>();Mat hierarchy = new Mat();Imgproc.findContours(binary, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);// 遍历所有轮廓,找到最大轮廓(假设为消息体)double maxArea = 0;Rect messageBodyRect = null;for (MatOfPoint contour : contours) {// 计算轮廓的面积double area = Imgproc.contourArea(contour);if (area > maxArea) {maxArea = area;// 获取该轮廓的边界矩形messageBodyRect = Imgproc.boundingRect(contour);}}// 可选:在原图上绘制检测出的消息体矩形框(调试用)if (messageBodyRect != null) {Imgproc.rectangle(src, new Point(messageBodyRect.x, messageBodyRect.y),new Point(messageBodyRect.x + messageBodyRect.width, messageBodyRect.y + messageBodyRect.height),new Scalar(0, 255, 0), 2);}// 返回检测到的消息体的面积(像素数)return maxArea;}
}
关键步骤说明:
- Bitmap转换为Mat对象:使用
Utils.bitmapToMat
方法将Android中的Bitmap格式转换为OpenCV可以处理的Mat对象。 - 灰度化处理:将彩色图像转换为灰度图,使图像处理更简单。使用
Imgproc.cvtColor
方法。 - 二值化处理:使用
Imgproc.threshold
方法将灰度图转换为黑白二值图像,方便后续的轮廓检测。 - 轮廓检测:通过
Imgproc.findContours
方法检测图像中的所有轮廓。该函数会返回每个轮廓的点集。 - 计算消息体的大小:遍历所有的轮廓,找出面积最大的轮廓,假设它就是消息体,并计算其面积。
- 绘制矩形框(可选):使用
Imgproc.rectangle
在原图上绘制消息体的边界矩形框。
注意事项:
- 需要确保在Android项目中正确配置OpenCV库。
- 对于不同的图片,二值化的阈值(代码中为128)可能需要根据实际情况调整。
- 轮廓检测的准确性依赖于图片的清晰度和消息体的突出程度。如果背景复杂,可能需要先进行去噪处理。
- OpenCV的官方网站是 https://opencv.org/。
你可以在该网站上找到OpenCV的最新版本下载、文档、教程以及相关的资源。
相关文章:
在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
在Android应用中,判断一张图片中“消息体”的大小,可以通过图像处理技术来实现。主要的步骤包括:将图像转换为灰度图,进行二值化处理,接着使用轮廓检测或边缘检测来识别消息体的边界,最后计算消息体的大小。…...

Jenkins+Ant+Jmeter接口自动化集成测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Jenkins安装配置 1、安装配置JDK1.6环境变量; 2、下载jenkins.war,放入C:\jenkins目录下,目录位置随意; J…...

JavaSE——集合4:List接口实现类—LinkedList
目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…...

FPGA图像处理之三行缓存
文章目录 一、前言二、FPGA实现三行缓存的架构三、Verilog代码实现四、仿真验证五、输入图像数据进行仿真验证 一、前言 在 FPGA 做图像处理时,行缓存是一个非常重要的一个步骤,因为图像输入还有输出都是一行一行进行的,即处理完一行后再处理…...
10月15日,每日信息差
第一、《哈利・波特与魔法石》在中国内地总票房突破 3 亿元,包括 2002 年首映的 5600 万,2020 年重映的 1.923 亿,以及 2024 年重映的 5170 万。 第二、全国铁路实施新货物列车运行图,增开城际班列至 131 列,多式联运…...
4G、5G通信中,“网络侧“含义
在5G通信中,"网络侧"这个术语可以指代不同的网络元素,具体取决于上下文。通常,网络侧可以包括以下两个主要部分: 基站(gNB): 基站是无线接入网(RAN)的一部分&a…...
spring boot核心理解-各种starter
理解 Spring Boot 的 Starter 机制以及如何选择和使用各种 starter,是开发 Spring Boot 应用的重要一环。Spring Boot Starter 是一组方便的依赖组合,用于简化 Spring 项目中的依赖管理。它们可以帮助开发者快速引入所需的库和自动配置,从而加…...

解决海外社媒风控问题的工具——云手机
随着中国企业逐步进入海外市场,海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下,云手机作为一种新型技术解决方案,正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控,企业经常面临账号流…...

全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
软件简介 PDF Shaper是一款功能强大的PDF工具集,它提供了一系列用于处理PDF文档的工具。这款软件使用户能够轻松地转换、分割、合并、提取页面以及旋转和加密PDF文件。PDF Shaper的界面简洁直观,使得即使是新手用户也能快速上手。它支持广泛的功能&…...
Maven入门
Maven Maven Wrapper 版本一致性: Maven Wrapper 允许你在项目中指定一个特定的 Maven 版本。这意味着所有开发人员和 CI/CD 环境都将使用相同版本的 Maven,从而避免由于版本不一致导致的问题。 简化设置: 新开发者克隆项目时,…...

Chromium 中window.DOMParser接口说明c++
一、DOMParser DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。 备注: XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML,在其response 属性中返回Document。 你可以使用XMLSerializer 接口执行相反的操作 - 将…...

linux 安装gitlab
安装环境 CentOS 7.7 (centos6.10会报错)2g内存防火墙关闭 安装步骤: 1 安装gitlab # yum install -y git curl policycoreutils-python openssh-server # 安装依赖 # wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce…...

java基础(5)继承与多态
目录 编辑 1.前言 2.正文 2.1继承 2.1.1继承概念 2.1.2继承语法 2.1.3子类访问父类 2.1.4super关键字 2.2多态 2.2.1多态概念 2.2.2多态条件 2.2.3重写 2.2.4向上转型与向下转型 2.2.5为什么要使用多态 3.小结 1.前言 哈喽大家好啊,今天继续来为大…...

Flink消费Kafka实时写入Doris
本文模拟实际生产环境,通过FileBeat采集日志信息到Kafka,再通过Flink消费Kafka实时写入Doris。 文章目录 Filebeat采集日志到KafkaFlink消费Kafka实时写入Doris总结 Filebeat采集日志到Kafka 常见的日志采集工具有以下几种:Flume、Logstash和…...
实现Web QQ音乐打开现有新标签页切换音乐
若没有打开播放音乐标签页,则打开新标签页播放所选音乐如果已打开新标签页,则直接切换所选音乐 pageA.vue <script setup lang"ts"> const tab2 ref<any>(null); const router useRouter();interface Track {id: number;name: …...
从底层结构开始学习FPGA(15)----时钟结构(通俗版)
目录 0、前言 1、IO Bank和Clock Region(时钟区域)是一个东西吗? 2、时钟输入管脚 3、时钟架构 3.1、全局时钟BUFG 3.2、水平时钟BUFH 3.3、IO时钟BUFIO 3.4、区域时钟BUFR/BUFMR 4、总结 《从底层结构开始学习FPGA》目录与传送门 0、前言 我思来想去,总觉…...

MacOS Sublime Text 解决中乱码
1. 安装Package Control 官方安装指南 手动安装 通过以此点击菜单 Sublime Text > Preferences > Browse Packages 打开Packages目录找到Packages的同级目录Installed Packages下载PackageControl.sublime-package并保存到Installed Packages中在菜单 Sublime Text &g…...

Python画笔案例-084 绘制 3D立方体
1、绘制 3D立方体 通过 python 的turtle 库绘制 3D立方体,如下图: 2、实现代码 绘制 3D立方体,以下为实现代码: import turtle import timeviewfactor = 150 xshift = 0 yshift = 0 zshift = 50...
“八股文”面试:助力、阻力还是空谈?
在当今的IT行业,面试程序员时提及“八股文”已成为一种普遍现象。所谓“八股文”,通常指的是一系列固定的、标准化的面试问题及其解答,这些问题往往涵盖了计算机科学和软件工程的基础知识,以及一些流行的技术框架和算法。然而&…...

如何实现弹出式窗口
文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧,通常显示三个圆点图标,点击该图标…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...