Android OpenCV 旋转图像

使用opencv的摄像头预览图像是逆时针旋转90度的。

c++的方法多一点,我就想java也有直接的办法。参考API后看到这样一个方法,在Imgproc类下。

API说明:

getRotationMatrix2D
public static Mat getRotationMatrix2D(Point center,
                      double angle,
                      double scale)
Calculates an affine matrix of 2D rotation.

The function calculates the following matrix:

alpha beta(1- alpha) * center.x - beta * center.y - beta alpha beta * center.x + (1- alpha) * center.y

where

alpha = scale * cos angle, beta = scale * sin angle

The transformation maps the rotation center to itself. If this is not the target, adjust the shift.

Parameters:
center - Center of the rotation in the source image.
angle - Rotation angle in degrees. Positive values mean counter-clockwise rotation (the coordinate origin is assumed to be the top-left corner).
scale - Isotropic scale factor.

warpAffine
public static void warpAffine(Mat src,
              Mat dst,
              Mat M,
              Size dsize)
Applies an affine transformation to an image.

The function warpAffine transforms the source image using the specified matrix:

dst(x,y) = src(M _11 x + M _12 y + M _13, M _21 x + M _22 y + M _23)

when the flag WARP_INVERSE_MAP is set. Otherwise, the transformation is first inverted with "invertAffineTransform" and then put in the formula above instead of M. The function cannot operate in-place.

Note: cvGetQuadrangleSubPix is similar to cvWarpAffine, but the outliers are extrapolated using replication border mode.

Parameters:
src - input image.
dst - output image that has the size dsize and the same type as src.
M - 2x 3 transformation matrix.
dsize - size of the output image.

我在预览里添加转换函数:
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    // TODO Auto-generated method stub
    Mat dst = new Mat();
    Mat gray = inputFrame.gray();
    Mat rotateMat = Imgproc.getRotationMatrix2D(new Point(gray.rows()/2,gray.cols()/2), 90, 1);
    Imgproc.warpAffine(gray, dst, rotateMat, dst.size());
    return dst;
}
图像顺时针旋转90度


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值