击中击不中变换是比图像腐蚀要求更加苛刻的一种形态学 *** 作,图像腐蚀只需要图像能够将结构元素中所有非0元素包含即可,但是击中击不中变换要求原图像中需要存在与结构元素一模一样的结构,即结构元素中非0元素也需要同时被考虑。
APIpublic static void morphologyEx(Mat src, Mat dst, int op, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
-
参数一:src,输入的待形态学 *** 作图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
-
参数二:dst,形态学 *** 作后的输出图像,与输入图像src具有相同的尺寸和数据类型
-
参数三:op,形态学 *** 作类型的标志
-
参数四:kernel,用于形态学 *** 作的结构元素,可以自己定义,也可以用getStructuringElement()函数生成
-
参数五:anchor,中心点在结构元素中的位置,默认参数为结构元素的几何中心点
-
参数六:iterations, *** 作次数,默认值为1
-
参数七:borderType,像素外推法选择标志
-
参数八:borderValue,使用边界不变外推法时的边界值
class MorphologyExActivity : AppCompatActivity() {
private lateinit var mBinding: Act
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
ivityMorphologyExBinding
private lateinit var mBinary: Mat
private var mFlag = Imgproc.MORPH_OPEN
set(value) {
field = value
doMorphology(value, mSize.toDouble())
}
private var mSize = 3
set(value) {
field = value
doMorphology(mFlag, value.toDouble())
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_morphology_ex)
mBinding.seekbar.setonSeekBarChangeListener(object : SeekBar.onSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
mSize = progress
mBinding.tvSize.text = progress.toString()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
mBinary = Mat()
val bgr = Utils.loadResource(this, R.drawable.number)
val gray = Mat()
Imgproc.cvtColor(bgr, gray, Imgproc.COLOR_BGR2GRAY)
Imgproc.threshold(gray, mBinary, 125.0, 255.0, Imgproc.THRESH_BINARY_INV)
mBinding.ivLena.showMat(mBinary)
bgr.release()
gray.release()
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_morphology_ex, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
title = item.title
mFlag = when (item.itemId) {
R.id.morphology_close -> {
Imgproc.MORPH_CLOSE
}
R.id.morphology_gradient -> {
Imgproc.MORPH_GRADIENT
}
R.id.morphology_top_hat -> {
Imgproc.MORPH_TOPHAT
}
R.id.morphology_black_hat -> {
Imgproc.MORPH_BLACKHAT
}
R.id.morphology_hit_miss -> {
Imgproc.MORPH_HITMISS
}
else -> Imgproc.MORPH_OPEN
}
return true
}
private fun doMorphology(flag: Int, width: Double) {
val kernel = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT, Size(width, width))
val dst = Mat()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)