栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

#include
#include
#include
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_(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
#include
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);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号