Java Opencv开山之路–(2)–Java Opencv 图片旋转
废话少说,上代码:
/**
* 逆时针旋转,但是图片宽高不用变,此方法与rotateLeft和rotateRight不兼容
*
* @param src 源
* @param angele 旋转的角度
* @return 旋转后的对象
*/
public static Mat rotate(Mat src, double angele) {
Mat dst = src.clone();
Point center = new Point(src.width() / 2.0, src.height() / 2.0);
Mat affineTrans = Imgproc.getRotationMatrix2D(center, angele, 1.0);
Imgproc.warpAffine(src, dst, affineTrans, dst.size(), Imgproc.INTER_NEAREST);
return dst;
}
/**
* 图像整体向左旋转90度
*
* @param src Mat
* @return 旋转后的Mat
*/
public static Mat rotateLeft(Mat src) {
Mat tmp = new Mat();
// 此函数是转置、(即将图像逆时针旋转90度,然后再关于x轴对称)
Core.transpose(src, tmp);
Mat result = new Mat();
// flipCode = 0 绕x轴旋转180, 也就是关于x轴对称
// flipCode = 1 绕y轴旋转180, 也就是关于y轴对称
// flipCode = -1 此函数关于原点对称
Core.flip(tmp, result, 0);
return result;
}
/**
* 图像整体向左旋转90度
*
* @param src Mat
* @return 旋转后的Mat
*/
public static Mat rotateRight(Mat src) {
Mat tmp = new Mat();
// 此函数是转置、(即将图像逆时针旋转90度,然后再关于x轴对称)
Core.transpose(src, tmp);
Mat result = new Mat();
// flipCode = 0 绕x轴旋转180, 也就是关于x轴对称
// flipCode = 1 绕y轴旋转180, 也就是关于y轴对称
// flipCode = -1 此函数关于原点对称
Core.flip(tmp, result, 1);
return result;
}
测试代码:
@Test
public void testRotate() {
Mat dog = Imgcodecs.imread("/tmp/dog.jpg");
Mat result = ImageUtils.rotate(dog, 30);
showImg(result);
}
@Test
public void testRotateLeft() {
Mat dog = Imgcodecs.imread("/tmp/dog.jpg");
Mat result = ImageUtils.rotateLeft(dog);
showImg(result);
}
@Test
public void testRotateRight() {
Mat dog = Imgcodecs.imread("/tmp/dog.jpg");
Mat result = ImageUtils.rotateRight(dog);
showImg(result);
}
private void showImg(Mat mat) {
HighGui.imshow("结果", mat);
HighGui.waitKey();
}
结果:
原图:
看这里,看这里
文章总目录:博客导航
参考文章:https://blog.****.net/u_ascend/article/details/85007353