三、几何学处理(缩放,拼接,裁剪)

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;
}

运行结果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值