1、图像的缩放
函数原型:resize( InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR );
其中:
第一个参数src :输入的图像。
第二个参数 dst: 输出的图像, dst的类型和src的类型一样。dst的大小又第3个或第四第五个参数决定。
第三个参数 dsize :目标图像的大小。
第四个参数 fx :在x轴上缩放比例。
第五个参数fy:在y轴上的缩放比例。
第六个参数 interpolation 插值方法有以下四种方式:
INTER_NN -最近邻插值
INTER_LINEAR -双线性插值 (缺省使用)
INTER_AREA -使用象素关系重采样,当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NN 方法。
INTER_CUBIC -立方插值。
注意:dsize与fx和fy必须不能同时为零
eg:
#include<iostream>
#include<opencv2/opencv.hpp>
int main() {
cv::Mat image = cv::imread("D://RM//OpenCv的学习//几何学处理//图像的缩放//55.jpg");
if (image.empty()) {
std::cout << "can not read this ...." << std::endl;
return 0;
}
cv::Mat dst1;
cv::Mat dst2;
cv::resize(image, dst1, cv::Size(0, 0), 0.5, 0.5);
cv::resize(image, dst2, cv::Size(350, 350));
cv::imshow("原图",image);
cv::imshow("长宽缩放为原图0.3倍",dst1);
cv::imshow("长宽缩放为特定值",dst2);
cv::waitKey(0);
}
运行结果如下:
2、最简单的图像的拼接(以后还会学全景拼接)
最简单的图像拼接:水平和竖直拼接
vconcat()---垂直方向拼接,要求待拼接图像有相同的宽度
hconcat()---水平方向拼接,要求待拼接图像有相同的高度
一定要注意这两个函数的使用,当水平拼接时要有相同的高度,竖直拼接时要有相同的高度, 所以在拼接之前要先使用缩放函数(resize)来调整要拼接图像的高度/宽度。
(刚开始的时候,我把三个照片拼接起来,但是输出时却不知道输出的的图片名应该是哪一个,查资料后才明白,有一种方法是用vector中的push_back把三张照片封装起来。)
void push_back(value_type_Ch);
参数 _Ch–>The character to be added to the end of the string.
vector的用法见baidu.
代码:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc,char **argv) {
namedWindow("dst3", WINDOW_AUTOSIZE);
Mat img1 = imread("D://RM//OpenCv的学习//几何学处理//图像的拼接//11.jpg");
Mat img2 = imread("D://RM//OpenCv的学习//几何学处理//图像的拼接//22.jpg");
Mat img3 = imread("D://RM//OpenCv的学习//几何学处理//图像的拼接//55.jpg");
Mat dst1;
Mat dst2;
Mat dst3;
Mat result;
//将图片转换成长度\宽度相等的图像
resize(img1, dst1, Size(300, 300), 0, 0);
resize(img2, dst2, Size(300, 300), 0, 0);
resize(img3, dst3, Size(300, 300), 0, 0);
vector<Mat> imgs1;
imgs1.push_back(dst1);
imgs1.push_back(dst2);
//水平拼接(2张)
hconcat(imgs1,result);
imshow("水平拼接", result);
//垂直拼接(3张)
Mat chuizhi;
vector<Mat> imgs2;
imgs2.push_back(dst1);
imgs2.push_back(dst2);
imgs2.push_back(dst3);
vconcat(imgs2, chuizhi);
imshow("垂直拼接",chuizhi);
waitKey(0);
return 0;
}
3、图像的裁剪
简单的矩形裁剪函数Rect
Rect(参数1,参数2,参数3,参数4)是opencv画的矩形,四个参数分别为矩形(左上角的column值,左上角的row值,矩形column方向上的宽,矩形row方向上的宽)
代码
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat img;
img = imread("D://RM//OpenCv的学习//几何学处理//图像的拼接//11.jpg");
imshow("原图", img);
Rect select = Rect(0, 0, 180, 105);
Mat ROI = img(select);
imshow("裁剪之后的图片",ROI);
waitKey(0);
return 0;
}
运行结果如下: