src.convertTo(dst, type, scale, shift)
缩放并转换到另外一种数据类型:
dst:目的矩阵;
type:需要的输出矩阵类型,或者更明确的,是输出矩阵的深度,如果是负值(常用-1)则输出矩阵和输入矩阵类型相同;
scale:比例因子;
shift:将输入数组元素按比例缩放后添加的值;
void cv::normalize ( InputArray src,
InputOutputArray dst,
double alpha = 1,
double beta = 0,
int norm_type = NORM_L2,
int dtype = -1,
InputArray mask = noArray())
参数解析:
src:输入
dst:输出
alpha:归一化目标值(范围归一化中的下边界)
beta:(范围归一化中的上边界),其他情况无效
norm_type:归一化方法
NORM_MINMAX 数组的数值被平移或缩放到一个指定的范围,线性归一化(图像数据最常用)
NORM_INF 归一化数组的(切比雪夫距离)L∞范数(绝对值的最大值)
NORM_L1 归一化数组的(曼哈顿距离)L1-范数(和的绝对值)
NORM_L2 归一化数组的(欧几里德距离)L2-范数
dtype:当为负数的时候,输出数据类型和输入一致;否则输出的通道数和输入一致,输出的数据类型和这里设置的一致
mask:掩膜
调整图像大小意味着改变它的尺寸,无论是宽度、高度还是两者都改变。此外,原始图像的纵横比可以保留在调整大小的图像中。为了调整图像大小,OpenCV 提供了 resize() 函数
void cv::resize (InputArray src,OutputArray 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
interpolation - 插值方法
INTER_NEAREST- 最近邻插值(最近邻插值) -
INTER_LINEAR双线性插值(默认使用)
INTER_AREA- 使用像素区域关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。
但是当图像被缩放时,它类似于 INTER_NEAREST 方法。
INTER_CUBIC- 4x4 像素邻域上的双三次插值
INTER_LANCZOS4- 8x8 像素邻域上的 Lanczos 插值
PS: 要缩小图像,通常使用INTER_AREA插值效果最好,而要放大图像,
通常使用CV_INTER_CUBIC(慢)或INTER_LINEAR(更快但看起来还可以)效果最好。
void normalize_demo(Mat& image) {
Mat dst;
cout << "变换前的type:" << image.type() << endl;
image.convertTo(image,CV_32F);
cout << "变换后的type:" << image.type() << endl;
normalize(image, dst, 1.0, 0, NORM_MINMAX);
imshow("图像归一化", dst);
}
void resize_demo(Mat& image) {
Mat zoomin, zoomout;
int h = image.rows;
int w = image.cols;
resize(image, zoomin, Size(w / 2, h / 2), 0, 0, INTER_AREA); //缩小到2/1
imshow("zoomin", zoomin);
resize(image, zoomout, Size(w * 1.5, h * 1.5), 0, 0, INTER_LINEAR); //放大1.5倍
imshow("zoomout", zoomout);
}
void test1501()
{
Mat image = imread("C:/Users/86156/Pictures/Saved Pictures/cwt.jpg");
imshow("图像", image);
normalize_demo(image);
waitKey(0);
}
int main()
{
test1501();
system("pause");
}