OpenCV进阶--图像变换
Posted 狗子不帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_NEAREST | 0 | 最近邻插值法 |
INTER_LINEAR | 1 | 双线性插值法(通常用于放大图像) |
INTER_CUBIC | 2 | 双三次插值(通常用于放大图像) |
INTER_AREA | 3 | 使用像素区域关系重新采样,首选用于图像缩小,图像放大时效果与INTER_NEAREST相似 |
INTER_LANCZOS4 | 4 | Lanczos插值法 |
INTER_LINEAR_EXACT | 5 | 位精确双线性插值法 |
INTER_MAX | 6 | 用掩码进行插值 |
这几天懈怠了,不行的坚持写,坚持!坚持!坚持!
以上是关于OpenCV进阶--图像变换的主要内容,如果未能解决你的问题,请参考以下文章
pyhton—opencv直线检测(HoughLines)找到最长的一条线
pyhton—opencv直线检测(HoughLines)找到最长的一条线