一、图像缩放

 #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. 从零开始一起学习SLAM | 相机成像模型

    上一篇文章<从零开始一起学习SLAM | 为啥需要李群与李代数?>以小白和师兄的对话展开,受到了很多读者的好评.本文继续采用对话的方式来学习一下相机成像模型,这个是SLAM中极其重要的内容 ...

  2. Lambda引言

    Lambda表达式:可以方便我们把方法当做参数传递 package airycode_java8.nice1; import org.junit.Test; import java.util.*; / ...

  3. LeetCode83.删除排序链表中的重复的元素

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...

  4. java 中多线程和锁的使用以及获取多线程执行结果

    多线程一:原生的写法   关键词 implements  实现  Runnable 类 run()  方法 注意点 : 创建类的实例 InterfaceController inter=new Int ...

  5. java virtual machine launcher Error:Could not create the Java Virtual Machine. Error:A Fatal exception has occurred,Program will exit.

    Error:Could not create the Java Virtual Machine. Error:A Fatal exception has occurred,Program will e ...

  6. 通过改hosts访问wikipedia

    能访问https://www.wikipedia.org 大部分时候我们是可以访问的wikipedia的主页或是英文首页的,但中文页面却经常被墙,这时候你可以通过在命令行下ping www.wikip ...

  7. 【2017-04-25】winform公共控件、菜单和工具栏

    一.公共控件 公共控件很多的属性很多都相似,这些是大部分都相同的: +布局 - AutoSize:自动适应控件上文字内容- Location:位置- Margin:控件间的间距- Size:控件大小 ...

  8. STL容器之deque

    [1]deque容器 deque 是对 vector 和 list 优缺点的结合,它是处于两者之间的一种容器. [2]deque方法集 应用示例代码: #include <deque> # ...

  9. c# 继承与多种状态

    可访问性: public                      无限制 internal                   只允许在同一个程序集访问 protected              ...

  10. html 基本布局介绍

    1.div默认是纵向排列的,例子如下: <div id="wrap"> <div id="div1">div1</div> ...