目录
使用 cv2.resize() 函数可以实现图像的缩放。你需要指定目标图像的大小或缩放比例以及插值方法。
void cv::resize ( InputArraysrc
OutputArray dst,
Size dsize,
double fx,
double fy,
int interpolation = INTER LINEAR(双线性插值)
)
以下是常用的 interpolation 参数及其描述:
cv2.INTER_NEAREST:最近邻插值
这是一种最简单的插值方法,它根据目标位置附近的最近一个已知像素的值来估算新的像素值。速度很快,但可能会导致块状的图像效果,特别是在放大图像时。
cv2.INTER_LINEAR:双线性插值
双线性插值考虑了目标位置附近的四个最近已知像素的值,然后根据距离和权重进行插值计算。这通常提供比最近邻插值更平滑的结果。
cv2.INTER_CUBIC:双三次插值
双三次插值使用目标位置附近的16个最近已知像素,根据距离和权重进行插值。它可以提供更高质量的图像,但计算开销较大。
cv2.INTER_LANCZOS4:Lanczos 插值
Lanczos 插值是一种高质量的插值方法,它使用一个较大的像素邻域来进行插值。它通常用于需要高质量图像的情况,但计算成本更高。
cv2.INTER_AREA:像素区域重采样
像素区域重采样是一种在图像缩小时常用的插值方法,它会根据目标位置附近的像素区域的平均值来计算新的像素值。这可以减少图像的模糊程度。
例子:

(原图) (gray)
-
- Mat gray;
-
- cvtColor(image,gray,COLOR_BGR2GRAY);
-
- Mat smallmg,bigImg0,bigImg1,bigImg2;
-
- resize(gray,smallmg,Size(15,15),0,0,INTER_AREA);//先将图像缩小
-
- resize(smallmg,bigImg0,Size(30,30),0,0,INTER_NEAREST);//最近邻插值
-
- resize(smallmg,bigImg1,Size(30,30),0,0,INTER_LINEAR);//双线性插值
-
- resize(smallmg,bigImg2,Size(30,30),0,0,INTER_CUBIC);//双三次插值




(smallmg) (bigImg0) (bigImg1) (bigImg2)
使用 cv2.flip() 函数可以实现图像的翻转。你需要指定图像和翻转方向(水平、垂直或同时水平和垂直)。
void cv::flip ( InputArray src,
OutputArray dst,
int flipCode
)
例子:
- Mat img_x,img_y,img_xy;
-
- flip(gray,img_x,0);//沿x轴对称
-
- flip(gray,img_y,1);//沿y轴对称
-
- flip(gray,img_xy,-1);//沿x轴对称,再沿y轴对称


(img_x) (img_y) (img_xy)
图像拼接通常涉及将多个图像在水平或垂直方向上连接起来,创建一个更大的图像。使用 cv2.hconcat() 和 cv2.vconcat() 函数可以在水平和垂直方向上进行图像拼接。
void cv::hconcat ( InputArray src1,
InputArray src2,
OutputArray dst
)
void cv::vconcat ( InputArray src1,
InputArray src2,
OutputArray dst
)
例子:
- //图像横向连接
-
- Mat imgh,imgv;
-
- hconcat(img_x,img_y,imgh);
-
- //图像竖向连接
-
- vconcat(img_x,img_y,imgv);

(imgh) (imgv)