ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android OpenCV(四十一),androidapp开发入门与项目实战

2022-02-05 10:06:13  阅读:184  来源: 互联网

标签:mBinding Imgproc 框架 androidapp FLOODFILL OpenCV private mFloodFillFlag Android


FLOODFILL_FIXED_RANGE:如果设置为这个标识符,就会考虑当前像素与种子之间的差,否则就考虑当前像素与其邻域像素的差。

FLOODFILL_MASK_ONLY,如果设置为这个标识符,函数不会去填充改变原始图像,而是去填充掩膜图像。也就是忽略第三个参数newVal

// C++: enum FloodFillFlags
public static final int
FLOODFILL_FIXED_RANGE = 1 << 16,
FLOODFILL_MASK_ONLY = 1 << 17;

所以, flag 可以用 按位或,即‘|’ 连接起来。例如想用 4 邻域填充,并填充固定像素范围,填充掩码而不是填充原图,以及设置填充值为 250,那么输入的参数为

4 or (250 shl 8) or Imgproc.FLOODFILL_FIXED_RANGE or Imgproc.FLOODFILL_MASK_ONLY

操作

/**

  • 图像分割–漫水填充法
  • author: yidong
  • 2020/11/7
    */
    class FloodFillActivity : AppCompatActivity() {
    private val mBinding by lazy { ActivityFloodFillBinding.inflate(layoutInflater) }
    private lateinit var mMenuDialog: BottomSheetDialog
    private lateinit var mMenuDialogBinding: LayoutFloodFillMenuBinding

private var mConnectionType = 4
private var mFloodFillFlag = 0
private var mScalarNumber = 250 shl 8

private lateinit var mRgb: Mat
private var loDiff = 0.0
set(value) {
field = value
doFloodFill()
}
private var upDiff = 0.0
set(value) {
field = value
doFloodFill()
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)
val bgr = Utils.loadResource(this, R.drawable.wedding)
mRgb = Mat()
Imgproc.cvtColor(bgr, mRgb, Imgproc.COLOR_BGR2RGB)
mBinding.ivLena.showMat(mRgb)
mBinding.sbLow.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
mBinding.tvLoDiff.text = p1.toString()
loDiff = p1.toDouble()
}

override fun onStartTrackingTouch(p0: SeekBar?) {
}

override fun onStopTrackingTouch(p0: SeekBar?) {
}

})
mBinding.sbUp.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
mBinding.tvUpDiff.text = p1.toString()
upDiff = p1.toDouble()
}

override fun onStartTrackingTouch(p0: SeekBar?) {
}

override fun onStopTrackingTouch(p0: SeekBar?) {
}

})
mBinding.btFlag.setOnClickListener {
showMenuDialog()
}
doFloodFill()
}

private fun doFloodFill() {
val tmp = mRgb.clone()
val maskers = Mat(mRgb.rows() + 2, mRgb.cols() + 2, CV_8UC1, Scalar.all(0.0))
Imgproc.floodFill(
tmp,
maskers,
Point(7.0, 7.0),
Scalar(65.0, 105.0, 225.0),
Rect(),
Scalar.all(loDiff),
Scalar.all(upDiff),
mConnectionType or mFloodFillFlag or mScalarNumber
)
if (mFloodFillFlag and Imgproc.FLOODFILL_MASK_ONLY == Imgproc.FLOODFILL_MASK_ONLY) {
mBinding.ivResult.showMat(maskers)
} else {
mBinding.ivResult.showMat(tmp)
}

tmp.release()
maskers.release()
}

private fun showMenuDialog() {
if (!this::mMenuDialog.isInitialized) {
mMenuDialog = BottomSheetDialog(this)
mMenuDialogBinding = LayoutFloodFillMenuBinding.inflate(layoutInflater)
mMenuDialog.setContentView(mMenuDialogBinding.root)
mMenuDialog.setOnDismissListener {
mConnectionType =
if (mMenuDialogBinding.rgFirst.checkedRadioButtonId == R.id.rb_8) {
8
} else {
4
}
mFloodFillFlag = if (mMenuDialogBinding.cbFixed.isChecked) {
mFloodFillFlag or Imgproc.FLOODFILL_FIXED_RANGE
} else {
mFloodFillFlag and Imgproc.FLOODFILL_FIXED_RANGE.inv()
}
mFloodFillFlag = if (mMenuDialogBinding.cbMaskOnly.isChecked) {
mFloodFillFlag or Imgproc.FLOODFILL_MASK_ONLY
} else {
mFloodFillFlag and Imgproc.FLOODFILL_MASK_ONLY.inv()
}
try {
mScalarNumber = mMenuDialogBinding.etScalar.text.toString().toInt(10) shl 8
} catch (e: NumberFormatException) {
e.printStackTrace()
}
doFloodFill()
}
}
mMenuDialog.show()
}

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

image

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分,更为了不影响阅读,这份文档已经打包在GitHub,有需要的朋友可以直接点此处前往免费下载

image

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

%E9%AB%98%E8%96%AA%EF%BC%81.md)。**

[外链图片转存中…(img-cj6liyaS-1644026124673)]

[外链图片转存中…(img-72EfiHLI-1644026124674)]

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

标签:mBinding,Imgproc,框架,androidapp,FLOODFILL,OpenCV,private,mFloodFillFlag,Android
来源: https://blog.csdn.net/m0_66145114/article/details/122788212

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有