一、图像缩放

 #include<opencv2/opencv.hpp>
using namespace cv; void main(){
Mat src=imread("E://0.jpg");
Mat dst;
resize(src,dst,Size(,));
imshow("src",src);
imshow("dst",dst);
waitKey();
}

二、图像平移

 #include<opencv2/opencv.hpp>
using namespace cv; //不改变图像大小
Mat imgTranslate(Mat &src,int x_off,int y_off){//x方向偏移,y方向偏移
int rows=src.rows;//行
int cols=src.cols;//列
Mat dst=Mat::zeros(src.size(),src.type());//创建一个全黑图像
for (int i = ; i < rows; i++)//遍历行
{
for (int j = ; j < cols; j++)//遍历列
{ int x=j+x_off;//列坐标+x方向偏移=当前x坐标
int y=i+y_off;
if(x>=&&y>=&&x<cols&&y<rows){
dst.at<Vec3b>(y,x)=src.at<Vec3b>(i,j);//赋值,(y,x)对应(i,j),详情见下面图示
}
}
}
return dst;
}
//改变图像大小
Mat imgTranslate2(Mat &src,int x_off,int y_off){
int rows=src.rows+y_off;
int cols=src.cols+x_off;
Mat dst=Mat::zeros(rows,cols,src.type());//注意与上面的差别,行列重新选值
for (int i = ; i < rows; i++)
{
for (int j = ; j < cols; j++)
{ int x=j+x_off;
int y=i+y_off;
if(x>=&&y>=&&x<cols&&y<rows){
dst.at<Vec3b>(y,x)=src.at<Vec3b>(i,j);
}
}
}
return dst;
} void main(){
Mat src=imread("E://0.jpg");
//Mat dst=imgTranslate(src,20,30);
Mat dst=imgTranslate2(src,-,-);
imshow("src",src);
imshow("dst",dst);
waitKey();
}

三、图像旋转

 #include<opencv2/opencv.hpp>
using namespace cv; void main(){
Mat src=imread("E://0.jpg");
Point2f center=Point2f(src.cols/,src.rows/);//旋转中心
double angle=;//旋转角度
double scale=0.5;//缩放尺度
Mat rotate=getRotationMatrix2D(center,angle,scale);//旋转矩阵
Mat dst;
warpAffine(src,dst,rotate,Size(,));//仿射变换 imshow("src",src);
imshow("dst",dst);
waitKey();
}

四、转置和镜像

 #include<opencv2/opencv.hpp>
using namespace cv; void main(){
Mat src=imread("E://1.jpg");
Mat dst;
//transpose(src,dst);//先左右翻转,然后再逆时针旋转90°
//flip(src,dst,0);//沿x轴翻转
//flip(src,dst,1);//大于0,沿y轴翻转
flip(src,dst,-);//小于0,沿原点翻转 imshow("src",src);
imshow("dst",dst);
waitKey();
}
transpose效果如下:

flipCode = 0, 垂直翻转(沿X轴翻转),效果如下:

flipCode > 0, 水平翻转(沿Y轴翻转),效果如下:

flipCode < 0, 水平垂直翻转(180°中心对称),效果如下:

五、重映射remap

 #include<opencv2/opencv.hpp>
using namespace cv; void main(){
Mat src=imread("E://0.jpg");
Mat dst; int rows=src.rows;
int cols=src.cols;
Mat xMap=Mat::zeros(src.size(),CV_32FC1);//map1
Mat yMap=Mat::zeros(src.size(),CV_32FC1);//map2 for (int i = ; i < rows; i++)
{
for (int j = ; j < cols; j++)
{
xMap.at<float>(i,j)=j;//保持列不变
//yMap.at<float>(i,j)=i+5*sin(j/10.0);//sin水波效果
yMap.at<float>(i,j)=rows-i;//上下翻转
}
}
remap(src,dst,xMap,yMap,CV_INTER_LINEAR); imshow("src",src);
imshow("dst",dst);
waitKey();
}

opencv学习之路(11)、图像几何变换的更多相关文章

  1. OpenCV成长之路:图像直方图的应用

    OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...

  2. OpenCV成长之路:图像滤波

    http://ronny.blog.51cto.com/8801997/1394138 OpenCV成长之路:图像滤波 2014-04-11 14:28:44 标签:opencv 边缘检测 sobel ...

  3. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  4. 第十三节,OPenCV学习(二)图像的简单几何变换

    图像的简单几何变换 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排 适当的几何变换可以最大程度地消除由于成像角度.透视关系乃至镜头自身原因所造成的几何失真所产生的的负面影响. 一.图像 ...

  5. opencv学习之路(13)、图像阈值化threshold

    一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...

  6. opencv学习之路(30)、分水岭算法及图像修补

    一.简介 二.分水岭算法 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat srcImg = ...

  7. opencv学习之路(12)、图像滤波

    一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...

  8. opencv学习之路(8)、基本图像运算——加减与或

    一.图像加法 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...

  9. opencv学习之路(7)、访问图像像素

    一.动态地址访问 #include <opencv2/opencv.hpp> #include<iostream> using namespace cv; using name ...

随机推荐

  1. Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子

    参考:https://blog.csdn.net/liruizhuang/article/details/5876455 <?xml version="1.0" encodi ...

  2. Adobe Flash Builder 调试器无法连接,无法进行调试,构建停止在57%

    参考:https://blog.csdn.net/wuboyaogun1/article/details/9105373 谷歌浏览器下载Flash debugger :Download the Win ...

  3. node+react 打包成功,控制台报错

    控制台报错: 'ReactCurrentOwner' of undefined 解决办法:RN版本的问题. As I mentioned, make sure you've installed the ...

  4. db2修改表结构,增加列,删除列等

    增加一列:ALTER TABLE tbname ADD COLUMN columnName datatype; 增加多列:ALTER TABLE tbname ADD COLUMN columnNam ...

  5. Unity shader学习之逐顶点漫反射光照模型

    公式如下: Cdiffuse = Clight * mdiffuse * max(0, dot(n,l)); 其中,n 为表面法线,l 为指向光源的单位向量,mdiffuse 为材质温反射颜色,Cdi ...

  6. 1.安装Python3和PyCharm

    一.安装Python3 1.进入官网:www.python.org 2.下载(可以选择你自己的电脑系统版本,我这里是win7 64位) 3.然后点击XXX.exe傻瓜式安装 4.配置环境变量 [右键计 ...

  7. 永恒之蓝msf下 ms17_010 (64位kali下安装wine32)

    本次用到的环境: kali(2016.2)32位系统.ip地址:192.168.1.104 目标靶机为:win7sp1x64系统(关闭防火墙),ip地址:192.168.1.105 ========= ...

  8. C-Cow Sorting (置换群, 数学)

    Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow has a uniqu ...

  9. 实战http切换成https

    Server端使用Nginx + Tomcat Niginx SSL on Tomcat SSL non 步骤: 1.修改代码,将外部引用的http js css 文件修改为https,若外部链接不支 ...

  10. GO富集分析

    GO的主要用途之一是对基因组进行富集分析.例如,给定一组在特定条件下上调的基因,富集分析将使用该基因组的注释发现哪些GO术语被过度表示(或未充分表示). 富集分析工具    用户可以直接从GOC网站的 ...