【opencv图像处理之几何变换(一)】

利用opencv完成对一个图像的变换需要两个算法,一个是空间坐标算法,描述每个坐标如何从初始坐标移动到最终坐标,一个是插值算法,描述出输出图像的每个像素的灰度值
几何变换又分为仿射变换,投影变换和极坐标变换。
1.二维坐标的空间仿射,仿射包括平移,缩放,旋转。
对于这三种变换,本质就是原来图像的矩阵和仿射矩阵作乘法运算得出结果,是python和c++的两种API不同
缩放

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main(int argc,char *argv[]){
 Mat I = imread(argv[1],CV_LOAD_IMAGE_GRAYSCALE);
 if(!I.data)
   return -1;
 Mat s = (Mat_<float>(2, 3)<<0.5, 0, 0, 0, 0.5, 0);
 Mat dst1;
 warpAffine(I, dst1, Size(I.cols/2, I.rows/2));//图像缩放
 //第二种方式。利用resize,个人觉得这种比较好理解
 resize(I, dst2, Size(I.cols/2, I.rows/2), 0.5, 0.5);
 imshow("I", I);
 imshow("warAffine", dst1);
 imshow("resize", dst2);
 waitKey(0);
 return 0;
 
 

旋转

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
int main(int argc, char*argv[]){
    Mat img = imread (argv[1], IMREAD_ANYCOLOR);
    Mat rImg;
    rotate(img, rImg, ROTATE_90_COLOCKWISE);
    imshow("yuantu", img);
    imshow("xuanzhuan", rImg);
    waitKey(0);
    return 0;}
    

以上仿射变化都是二维平面进行的,如果物体在三维空间中发生旋转,这种叫做投射变换
对于c++的API ,利用opencv的鼠标事件,在原图和画布上选取四组对应的坐标,然后计算变换矩阵完成图像的投影变换
,关键代码:

//计算投影变换矩阵
Mat p = getPerspetiveTransform(src, dst);
Mat result;
//投影变换
warpPespective(I, result, p , pI.size());
imshow("投影效果", result);
waitKey(0);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值