OpenCV进阶--图像变换(一)

一、图像连接

        图像连接是指两个具有相同高度或者宽度的图像连接到一起,图像的下(左)边缘是另一个上(右)边缘,图像连接常在需要对两幅图像内容进行对比的时候用到的。在OpenCV中针对图像左右连接和上下连接提供了两种不同的函数,vconcat()函数用于实现图像或矩阵数据的上下连接,hconcat()函数用于实现图像或矩阵数据的左右连接。

vconcat()函数原型 1:

void cv::vconcat(const Mat* src,
                 size_t nsrc,
                 OutputArray dst
                )

src:Mat矩阵类型的数组。数组中所有的Mat类型具有相同的列数并且具有相同的数据类型和通道数。

nsrc:数组中Mat类型数据的数目。

dst:连接后Mat类矩阵。结果的宽度与第一个Mat类型数据相同,高度为数组中所有Mat类型数据高度的总合,并且与第一个Mat类型数据具有相同的数据类型和通道数。

vconcat()函数原型 2:

void cv::vconcat(InputArray src1,
                 InputArray src2,
                 OutoutArray dst
                )

src1:第一个需要连接的Mat类矩阵。

src2:第二个需要连接的Mat类矩阵,与第一个参数具有相同的宽度,数据类型和通道数。

dst;连接后的Mat类矩阵。

        hconcat()函数与vconcat()函数的参数和意义都是一样的,只是hconcat()函数是左右连接。

hconcat()函数原型1:

void cv::hconcat(const Mat* src,
                 size_t nsrc,
                 OutputArray dst
                )

src:Mat矩阵类型的数组。数组中所有的Mat类型具有相同的列数并且具有相同的数据类型和通道数。

nsrc:数组中Mat类型数据的数目。

dst:连接后Mat类矩阵。结果的宽度与第一个Mat类型数据相同,高度为数组中所有Mat类型数据高度的总合,并且与第一个Mat类型数据具有相同的数据类型和通道数。

hconcat()函数原型2:

void cv::hconcat(InputArray src1,
                 InputArray src2,
                 OutoutArray dst
                )

src1:第一个需要连接的Mat类矩阵。

src2:第二个需要连接的Mat类矩阵,与第一个参数具有相同的宽度,数据类型和通道数。

dst;连接后的Mat类矩阵。

代码实例:

#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>

using namespace std;
using namespace cv;

int main()
{	
	//矩阵数组的横竖连接
	Mat matArray[] = { Mat(1, 2, CV_32FC1, cv::Scalar(1)),
		Mat(1, 2, CV_32FC1, cv::Scalar(2)) };
	Mat vout, hout;
	vconcat(matArray, 2, vout);
	cout << "图像数组的竖向连接:" << endl << vout << endl;
	hconcat(matArray, 2, hout);
	cout << "图像数组的横向连接:" << endl << hout << endl;
	waitKey(0);

	//矩阵的横竖拼接
	Mat A = (cv::Mat_<float>(2, 2) << 1, 7, 2, 8);
	Mat B = (cv::Mat_<float>(2, 2) << 4, 10, 5, 11);
	Mat vC, hC;
	vconcat(A, B, vC);
	cout << "多个图像竖向连接:" << endl << vC << endl;
	hconcat(A, B, hC);
	cout << "多个图像横向连接:" << endl << hC << endl;
	return 0;
}

二、图像尺寸变换

        顾名思义尺寸变换实际上就是改变图像的长和宽,实现图像的缩放。在OpenCV中提供了resize()函数把图像修改尺寸。

resize()函数原型:

void cv::resize(InputArray src,
                OutputArray dst,
                Size dsize,
                double fx = 0,
                double fy = 0,
                int interpolation = INTER_LINEAR
                )

src:输入图像。

dst:输出图像,图像的数据类型与src相同。

dsize:输出图像的尺寸。

fx:水平轴的比例因子,如果将水平轴变为原来的两倍,则赋值为2。

fy:   垂直轴的比例因子,如果将垂直轴变为原来的两倍,则赋值为2。

interpolation:插值方法的标志,可选参数在下表中给出。

插值方法标志
标志参数简记作用
INTER_NEAREST0最近邻插值法
INTER_LINEAR1双线性插值法(通常用于放大图像)
INTER_CUBIC2双三次插值(通常用于放大图像)
INTER_AREA3使用像素区域关系重新采样,首选用于图像缩小,图像放大时效果与INTER_NEAREST相似
INTER_LANCZOS44Lanczos插值法
INTER_LINEAR_EXACT5位精确双线性插值法
INTER_MAX6用掩码进行插值

        这几天懈怠了,不行的坚持写,坚持!坚持!坚持!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值