一、图像缩放

 #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. TM-align TM-score安装

    TM-align是由zhang yang LAB开发的一款做蛋白结构比对的软件. 下载链接:http://zhanglab.ccmb.med.umich.edu/TM-align/TMtools201 ...

  2. SWF加载器控件 SWFLoaderControl

    SWF加载器控件 书:165 <?xml version="1.0" encoding="utf-8"?> <s:Application xm ...

  3. HDU 2842 Chinese Rings(常数矩阵)

    Chinese Rings 转载自:点这里 [题目链接]Chinese Rings [题目类型]常数矩阵 &题意: 一种中国环,解开第k个环需要先解开全部的前(k-2)个环,并留有第(k-1) ...

  4. LeetCode38.报数

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  "one 1" ...

  5. Bootstrap-媒体查询-屏幕大小

    .container{padding:0 15px; margin:0 auto;} .container:before{ content: ''; display: table;/*防止第一个子元素 ...

  6. CentOS双机中Docker下安装Mysql并配置互为主从模式

    CentOS双机中Docker下安装Mysql并配置互为主从模式 目录 1.搜索镜像... 1 2.拉取镜像... 1 3.绑定端口: 1 4.配置文件(修改/etc/mysql/my.cnf文件): ...

  7. uva11990 动态逆序对

    这题说的是给了一个数组,按照他给的顺序依次删除数,在删除之前输出此时的逆序对个数 我们用Fenwick树 维护这整个数列, C[i]是一个 treap的头, 管理了在树状数组中 能影响他的点,然后我们 ...

  8. web api HttpConfiguration

    //设置web api configuration public static void Register(HttpConfiguration config){ config.Services.Rep ...

  9. volatile 线程内存模型

  10. django中orm的批量操作

    ORM批量操作 数据模型定义 from django.db import models class Product(models.Model): name = models.CharField(max ...