Android OpenCV(四十二),精通android游戏开发

  • 参数二:markers,输入/输出32位单通道图像的标记结果。必须与image大小相同。 在将图像传递给第二个参数之前,必须使用大于0的整数索引在图像中粗略标记出所需分割的区域。 因此,每个标记区域表示一个或多个连接分量,像素值分别用1、2、3等来表示。 我们可以通过使用findContoursdrawContours从二值掩码中检索此类标记。 标记是图像处理过程中的“种子”。标记图像中所有没有被标记的像素值为0。在输出图像中,两个区域之间的分割线用-1表示。

操作

/**

  • 图像分割–分水岭法
  • author: yidong
  • 2020/11/9
    */
    class WaterShedActivity : AppCompatActivity() {

private val mBinding: ActivityWaterShedBinding by lazy {
ActivityWaterShedBinding.inflate(
layoutInflater
)
}
private lateinit var mRgb: Mat
private lateinit var mGray: Mat

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)

mRgb = Mat()
mGray = Mat()
val bgr = Utils.loadResource(this, R.drawable.contourpoly)
Imgproc.cvtColor(bgr, mRgb, Imgproc.COLOR_BGR2RGB)
Imgproc.cvtColor(bgr, mGray, Imgproc.COLOR_BGR2GRAY)

mBinding.ivLena.showMat(mGray)

GlobalScope.launch(Dispatchers.IO) {
doWaterShed()
}
}

private fun doWaterShed() {
mBinding.progressBar.setVisible()
val markers = Mat(
mRgb.size(),
CvType.CV_32S,
Scalar.all(0.0)
)
// Imgproc.GaussianBlur(mGray, mGray, Size(13.0, 13.0), 4.0, 4.0
val binary = Mat()
Imgproc.threshold(
mGray,
binary,
20.0,
255.0,
Imgproc.THRESH_BINARY and Imgproc.THRESH_OTSU
)
mBinding.ivResult.showMat(binary)
val contours = mutableListOf()
val hierarchy = Mat()
Imgproc.findContours(
binary,
contours,
hierarchy,
Imgproc.RETR_TR

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

EE,
Imgproc.CHAIN_APPROX_SIMPLE
)

for (i in 0 until contours.size) {
Imgproc.drawContours(
markers,
contours,
i,
Scalar.all(i + 1.toDouble()),
-1,
Imgproc.LINE_8,
hierarchy,
Int.MAX_VALUE
)
}

Imgproc.watershed(mRgb, markers)

val colors = mutableListOf()
for (k in 0 until contours.size) {
val r = Random.nextInt(0, 255)
val g = Random.nextInt(0, 255)
val b = Random.nextInt(0, 255)
val scalar = doubleArrayOf(r.toDouble(), g.toDouble(), b.toDouble())
colors.add(scalar)
}

val resultImg = Mat(mGray.size(), CvType.CV_8UC3)
for (i in 0 until markers.rows()) {
for (j in 0 until markers.cols()) {
val index = markers.get(i, j)[0].toInt()

if (index == -1) { // -1:区域之间的分割线用-1表示
resultImg.put(i, j, 255.0, 255.0, 255.0)
Log.d(App.TAG, " i= i , j = i, j= i,j=j")
} else if (index <= 0 || (index > contours.size)) { // <0 or >size:未标记区域
resultImg.put(i, j, 0.0, 0.0, 0.0)
} else { // 0,1,2,3… size-1: 标记区域
resultImg.put(
i,
j,
colors[index - 1][0],
colors[index - 1][1],
colors[index - 1][2]
)
}
}
}
mBinding.progressBar.setInvisible()
mBinding.ivResult.showMat(resultImg)

markers.release()
resultImg.release()
}

override fun onDestroy() {
mGray.release()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Android开发中使用OpenCV进行图像处理是一项常见的任务。OpenCV是一个开源的计算机视觉库,它提供了许多强大的图像处理和计算机视觉算法。 要找到OpenCV的中文手册,可以在互联网上搜索OpenCV的官方网站,他们提供了许多文档和教程,其中包括了中文的版本。在OpenCV的官方网站上,你可以找到适用于Android开发的中文手册,其中包含了关于如何使用OpenCV库的详细说明和示例代码。 另外,你还可以在国内的一些技术论坛或博客上寻找中文的OpenCV教程。这些资源通常由熟悉OpenCVAndroid开发者撰写,并提供了一些实际项目的案例和指导。 此外,中文社区中还有一些开发者编写的OpenCV相关书籍或教程。这些资源通常是基于他们对OpenCV的经验和研究编写的,提供了更深入、系统的学习资料。你可以在互联网上搜索这些书籍或教程,并根据自己的需求进行选择。 总之,在Android开发中使用OpenCV可以帮助开发者实现许多图像处理和计算机视觉的功能。通过寻找适合自己的中文教程和手册,可以更好地理解和应用OpenCV的功能和技术。 ### 回答2: Android开发OpenCV中文手册是一本专门针对在Android平台上使用OpenCV进行图像处理和计算机视觉开发的指南。OpenCV是一个广泛使用的开源计算机视觉库,它提供了一系列丰富的功能和工具,用于处理图像和视频数据。 这本手册首先介绍了Android开发环境的搭建,包括Java开发环境的安装、Android Studio的配置和OpenCV库的导入。然后,手册详细说明了OpenCVAndroid开发中的基本用法,包括图像的读取和显示、图像处理的常用算法、图像特征提取和匹配、目标检测和跟踪等。 手册的内容丰富全面,结构清晰,每个主题都有详细的代码示例和实践案例。同时,手册也提供了一些实用的技巧和注意事项,帮助开发者更好地理解和使用OpenCV库。此外,手册还介绍了一些常见的问题和解决方案,以帮助开发者解决在实际开发中可能遇到的困难。 对于想要学习Android图像处理和计算机视觉的开发者来说,这本中文手册是一个宝贵的参考资料。它不仅提供了对OpenCV库的详细介绍,还将其与Android开发环境结合起来,使开发者能够更加方便地进行图像处理和计算机视觉的开发工作。 总之,Android开发OpenCV中文手册是一本很有价值的指南,它能够帮助开发者快速入门和掌握在Android平台上使用OpenCV进行图像处理和计算机视觉开发的技巧和方法。 ### 回答3: OpenCV(开源计算机视觉库)是一个功能强大且广泛使用的开源库,用于处理图像和视频的计算机视觉任务。它提供了许多基本的图像处理和计算机视觉算法,可以在Android开发中进行视觉处理。 对于想要开发Android应用程序并集成OpenCV的人来说,Opencv中文手册将是一个非常有用的资源。Opencv中文手册提供了关于OpenCV库中各种函数和方法的详细说明,以及它们如何在Android平台上使用的指导。 Opencv中文手册提供了适用于Android的特定指南,例如如何在项目中配置OpenCV库,如何导入OpenCV模块,以及如何使用OpenCV函数和方法进行图像处理。手册还提供了使用OpenCV进行基本图像处理的示例代码,例如图像的灰度化、旋转、裁剪等。 此外,Opencv中文手册还涵盖了计算机视觉算法的基本原理和应用。这些算法包括图像特征提取、目标检测和跟踪、人脸识别等。手册提供了这些算法的详细说明和示例代码,使开发人员能够理解和应用这些强大的视觉算法。 总之,Opencv中文手册对于想要在Android开发中集成OpenCV并进行图像处理和计算机视觉任务的开发人员来说,将是一个非常有用的资源。它提供了完整的文档和示例代码,帮助开发人员学习和使用OpenCV库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值