2021-09-26 旋转矩形RotateRect的角度和图片旋转

 

 旋转矩形的angle确定方式:X轴逆时针旋转,遇到的第一个边的延长线认为是宽(和长度无关),angle是宽和X轴的夹角。范围是(-90,0]

如果想要把矩形回正,需要对图片进行旋转,旋转角度规则:顺时针为负,逆时针为正

要把上述两个矩阵回正需要做的的:

		Point2f center(src.cols / 2, src.rows / 2);
		Mat rotm = getRotationMatrix2D(center, rectAngle, 1.0);
		Mat srcRotate;
		warpAffine(src, srcRotate, rotm, src.size(), INTER_LINEAR, 0);

当矩形为矩形1时,rectangle=rectangle+90   逆时针旋转20度

当矩形为矩形2时,rectangle=rectangle   顺时针旋转10度

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现旋转矩形的倾斜旋转变换矫正,可以使用 AffineTransform 类来实现。具体步骤如下: 1.获取旋转矩形的四个顶点坐标,可以使用 Rectangle2D 类的方法 getBounds2D 和 getPathIterator 来获取。 2.计算旋转矩形的中心点坐标。 3.根据旋转矩形的中心点坐标,创建 AffineTransform 对象。 4.使用 AffineTransform 对象的 rotate 方法对旋转矩形进行旋转变换。 5.使用 AffineTransform 对象的 shear 方法对旋转矩形进行倾斜变换。 6.使用 AffineTransform 对象的 translate 方法对旋转矩形进行平移变换。 7.使用 AffineTransform 对象的 transform 方法对旋转矩形进行变换。 8.将变换后的旋转矩形重新赋值给原来的矩形对象。 下面是一个示例代码: ``` // 定义一个旋转矩形 Rectangle2D rotateRect = new Rectangle2D.Double(100, 100, 200, 100); // 获取旋转矩形的四个顶点坐标 PathIterator iterator = rotateRect.getPathIterator(null); double[] coords = new double[6]; List<Point2D> points = new ArrayList<>(); while (!iterator.isDone()) { int type = iterator.currentSegment(coords); if (type == PathIterator.SEG_MOVETO || type == PathIterator.SEG_LINETO) { points.add(new Point2D.Double(coords[0], coords[1])); } iterator.next(); } // 计算旋转矩形的中心点坐标 double centerX = (points.get(0).getX() + points.get(2).getX()) / 2; double centerY = (points.get(0).getY() + points.get(2).getY()) / 2; // 创建 AffineTransform 对象 AffineTransform transform = new AffineTransform(); // 对旋转矩形进行旋转变换 double angle = Math.toRadians(30); transform.rotate(angle, centerX, centerY); // 对旋转矩形进行倾斜变换 double shearX = Math.tan(Math.toRadians(10)); double shearY = Math.tan(Math.toRadians(20)); transform.shear(shearX, shearY); // 对旋转矩形进行平移变换 double translateX = 50; double translateY = 100; transform.translate(translateX, translateY); // 对旋转矩形进行变换 Shape transformedShape = transform.createTransformedShape(rotateRect); // 将变换后的旋转矩形重新赋值给原来的矩形对象 rotateRect.setFrame(transformedShape.getBounds2D()); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值