图片翻转flip
//flip(
// Mat src, // 输入图像
// Mat dst, // 输出
// int flipCode = 0 // >0: 沿y-轴翻转, 0: 沿x-轴翻转, <0: x、y轴同时翻转
// );
public void testFlip() {
Mat src = GeneralUtils.converMat("C:\\图片\\test\\0001.jpg");
Mat dst = new Mat();
//X 方向翻转
Core.flip(src, dst, 0);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\xFlip.jpg");
//y 方向翻转
Core.flip(src, dst, 1);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\yFlip.jpg");
//对角翻转
Core.flip(src, dst, -1);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\xyFlip.jpg");
}
图片放大缩小resize
//resize (Mat src, Mat dst, Size dsize, double fx = 0, double fy = 0,int interpolation = INTER_LINEAR)
//参数
//src - 输入图像。
//dst - 输出图像;它的大小为 dsize(当它非零时)或从 src.size()、fx 和 fy 计算的大小;dst 的类型与 src 的类型相同。
//dsize - 输出图像大小;如果它等于零,则计算为:dsize = Size(round(fx*src.cols), round(fy*src.rows))。dsize 或 fx 和 fy 必须为非零。
//fx - 沿水平轴的比例因子;当它等于 0 时,它被计算为(double)dsize.width/src.cols()
//fy - 沿垂直轴的比例因子;当它等于 0 时,它被计算为(double)dsize.height/src.rows()
//插值 - 插值方法 InterpolationFlags :
//INTER_NEAREST- 最近邻插值(最近邻插值) -
//INTER_LINEAR双线性插值(默认使用)
//INTER_AREA- 使用像素区域关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于 INTER_NEAREST 方法。
//INTER_CUBIC- 4x4 像素邻域上的双三次插值
//INTER_LANCZOS4- 8x8 像素邻域上的 Lanczos 插值
public void testResize() {
Mat src = GeneralUtils.converMat("C:\\图片\\test\\0001.jpg");
int h = src.rows();
int w = src.cols();
float fx = 0f;
float fy = 0f;
Mat dst = Mat.zeros(src.size(), src.type());
//INTER_NEAREST 最近邻插值(最近邻插值)
Imgproc.resize(src, dst, new Size(2 * w, 2 * h), fx , fy, Imgproc.INTER_NEAREST);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\INTER_NEAREST.jpg");
//INTER_LINEAR双线性插值(默认使用)
Imgproc.resize(src, dst, new Size(2 * w, 2 * h), fx , fy, Imgproc.INTER_LINEAR);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\INTER_LINEAR.jpg");
//INTER_AREA- 使用像素区域关系重采样。
Imgproc.resize(src, dst, new Size(2 * w, 2 * h), fx , fy, Imgproc.INTER_AREA);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\INTER_AREA.jpg");
//INTER_CUBIC- 4x4 像素邻域上的双三次插值
Imgproc.resize(src, dst, new Size(2 * w, 2 * h), fx , fy, Imgproc.INTER_CUBIC);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\INTER_CUBIC.jpg");
//INTER_LANCZOS4- 8x8 像素邻域上的 Lanczos 插值
Imgproc.resize(src, dst, new Size(2 * w, 2 * h), fx , fy, Imgproc.INTER_LANCZOS4);
GeneralUtils.saveByteImg(dst, "C:\\图片\\test\\INTER_LANCZOS4.jpg");
}
画矩形,直线,圆,椭圆
public void testDraw() {
//创建图片,并设置白色背景
Mat src = Mat.zeros(new Size(300, 300), CvType.CV_8UC3);
src.setTo(new Scalar(255, 255, 255));
//画直线
Imgproc.line(src, new Point(100, 100), new Point(200, 200), new Scalar(0, 0, 0), 1, Imgproc.LINE_AA, 0);
//画矩形
Imgproc.rectangle(src, new Point(100, 100), new Point(200, 200), new Scalar(255, 255, 0), 2, Imgproc.LINE_4, 0);
//画圆
Imgproc.circle(src, new Point(100, 100), 50, new Scalar(0, 0, 255), 2, Imgproc.LINE_AA, 0);
//画椭圆
Imgproc.ellipse(src, new Point(100, 100), new Size(100, 50), 360, 0, 360, new Scalar(0, 255, 0), 2, Imgproc.LINE_AA, 0);
GeneralUtils.saveByteImg(src, "C:\\图片\\test\\draw.jpg");
}
对应GeneralUtils如下:GeneralUtils
求关注!!!