这是我参与更文挑战的第 21 天,活动详情查看: 更文挑战
图像翻转
图像翻转
图像翻转操作,就是将图像二维数组沿水平轴,垂直轴或者两个轴进行翻转操作。
图像转置
图像转置操作,就是将图像矩阵执行转置操作。
图像重复
图像复制操作,就是用输入图像的重复副本填充输出图像。
图像对称
将方矩阵的下半部或上半部复制到另一半。
API
图像翻转
public static void flip(Mat src, Mat dst, int flipCode)
- 参数一:src,输入图像。
- 参数二:dst,输出图像,大小与类型与原图相同。
- 参数三:flipCode,翻转标志位。0代表沿着X轴翻转,正数如1代表沿着Y轴翻转。负数如-1代表沿着X轴Y轴翻转。
图像转置
public static void transpose(Mat src, Mat dst)
- 参数一:src,输入图像。
- 参数二:dst,输出图像,大小与类型与原图相同。
图像重复
public static void repeat(Mat src, int ny, int nx, Mat dst)
- 参数一:src,输入图像。
- 参数二:ny,Y轴方向复制多少次。
- 参数三:nx,X轴方向复制多少次。
- 参数四:dst,输出图像,类型与原图相同。
图像对称
public static void completeSymm(Mat m, boolean lowerToUpper)
-
参数一:src,输入图像方矩阵,同时也是输出图像。
-
参数二:lowerToUpper,如果为true,则将下半部分复制到上半部分。否则,将上半部分复制到下半部分。
操作
/**
* 图像翻转
* author: yidong
* 2020/12/20
*/
class FlipActivity : AppCompatActivity() {
private val mList = mutableListOf<ImageTextObject>()
private val mAdapter by lazy { ImageTextAdapter(this, mList) }
private val mBinding: ActivityFlipBinding by lazy {
ActivityFlipBinding.inflate(layoutInflater)
}
private val rgb: Mat by lazy {
val bgr = getBgrFromResId(R.drawable.lena)
bgr.toRgb()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)
mBinding.container.adapter = mAdapter
wrapCoroutine({ showLoading() }, { doFlip() }, { hideLoading() })
}
override fun onDestroy() {
rgb.release()
super.onDestroy()
}
private fun doFlip() {
val resultX = Mat()
val resultY = Mat()
val resultXY = Mat()
val resultTranspose = Mat()
val resultRepeat = Mat()
Core.flip(rgb, resultX, 0)
Core.flip(rgb, resultY, 1)
Core.flip(rgb, resultXY, -1)
Core.transpose(rgb, resultTranspose)
Core.repeat(rgb, 2, 2, resultRepeat)
val resultSymmetryLowerToUpper = rgb.clone()
Core.completeSymm(resultSymmetryLowerToUpper, true)
val resultSymmetryUpperToLower = rgb.clone()
Core.completeSymm(resultSymmetryUpperToLower, false)
mList.add(ImageTextObject(rgb, "原图"))
mList.add(ImageTextObject(resultX, "X轴翻转"))
mList.add(ImageTextObject(resultY, "Y轴翻转"))
mList.add(ImageTextObject(resultXY, "XY轴翻转"))
mList.add(ImageTextObject(resultTranspose, "转置"))
mList.add(ImageTextObject(resultRepeat, "repeat"))
mList.add(ImageTextObject(resultSymmetryLowerToUpper, "Symmetry(下到上)"))
mList.add(ImageTextObject(resultSymmetryUpperToLower, "Symmetry(上到下)"))
}
private fun showLoading() {
mBinding.isLoading = true
}
private fun hideLoading() {
mBinding.isLoading = false
mAdapter.notifyDataSetChanged()
}
}