Android使用OpenCV裁剪和旋转

fun rorationImage(data:ByteArray,cropWidth:Int):ByteArray{
        // 创建一个空的 Mat 对象
        val src = Mat(camera_h,camera_w,CvType.CV_8UC1)
        // 将帧数据转换为 Mat 对象
        src.put(0, 0, data)
        // 创建新的 Mat 对象用于存储裁剪后的图像
        val croppedMat = Mat(src, Rect(cropWidth/2, 0, camera_w-cropWidth, camera_h))
        // 调整新的 Mat 对象的尺寸
//      val resizedMat = Mat()
//      val newSize = Size(camera_h.toDouble(), camera_h.toDouble())
//      Imgproc.resize(croppedMat, resizedMat, newSize)
        src.release()
//        croppedMat.release()
        // 将裁剪并调整尺寸后的 Mat 对象转换回字节数组形式的帧数据
//        val croppedFrameData = ByteArray((resizedMat.total() * resizedMat.channels()).toInt())
//        resizedMat.get(0, 0, croppedFrameData)
//        resizedMat.release()
        // 定义旋转角度和旋转中心
        val angle = 90.0
        val center = Point(((camera_w-cropWidth) / 2).toDouble(), (camera_h / 2).toDouble())
        // 计算旋转矩阵
        val rotationMatrix: Mat = Imgproc.getRotationMatrix2D(center, angle, 1.0)
        // 执行仿射变换,实现图像旋转
        val rotatedMat = Mat(camera_w-cropWidth, camera_h, CvType.CV_8UC1);
        Imgproc.warpAffine(croppedMat, rotatedMat, rotationMatrix, Size(camera_h.toDouble(), (             camera_w-cropWidth).toDouble()))
//        resizedMat.release()
        // 将旋转后的 Mat 对象转换回字节数组
        val rotatedData = ByteArray(rotatedMat.rows() * rotatedMat.cols())
        rotatedMat[0, 0, rotatedData]
        rotatedMat.release()
        return rotatedData
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值