图像平移:

      1.不改变图像大小

       2.改变图像大小

编程按照目标图像的角度去编写

 不改变大小的平移
1 void imageTranslation1(Mat& src, Mat& dst, const int& xoffset, const int& yoffset)
{
cvtColor(src, src, CV_BGR2GRAY);
const int height = src.rows;
const int width = src.cols;
dst.create(src.size(), src.type());
dst.setTo();
for (size_t i = ; i < height; i++)
{
for (size_t j = ; j < width; j++)
{
int x = j - xoffset;//列x=j
int y = i - yoffset;//行y=i
if (x >= && y >= && x <= width && y <= height)
{
dst.at<uchar>(i, j) = src.at<uchar>(y, x);
}
}
}
}
//----改变图像大小的平移
void imageTranslation2(Mat& src, Mat& dst, const int& xoffset, const int& yoffset)
{
cvtColor(src, src, CV_BGR2GRAY);
dst.create(Size(src.cols + abs(xoffset), src.rows + abs(yoffset)), src.type());
dst.setTo();
const int height = dst.rows;
const int width = dst.cols;
for (size_t i = ; i < height; i++)
{
for (size_t j = ; j < width; j++)
{
int x = j - xoffset;//列x=j
int y = i - yoffset;//行y=i
if (x >= && y >= && x <= width && y <= height)
{
dst.at<uchar>(i, j) = src.at<uchar>(y, x);
}
}
}
}


图像的缩放:

          1.基于等间隔提取图像缩放

        2.基于区域子块提取图像缩放

 等间隔
1 void imageReduction1(Mat& src, Mat& dst, float kx, float ky)
{ cvtColor(src, src, CV_BGR2GRAY);
dst.create(Size(cvRound(src.cols*kx), cvRound(src.rows*ky)), src.type());
const int height = dst.rows;
const int width = dst.cols;
dst.setTo();
for (size_t i = ; i < height; i++)
{
for (size_t j = ; j < width; j++)
{
int y = static_cast<int>((i + ) / kx);
int x = static_cast<int>((j + ) / ky);
dst.at<uchar>(i, j) = src.at<uchar>(y, x);
}
}
}
 区域子块
1 void imageReduction2(Mat& src, Mat& dst, float kx, float ky)
{ cvtColor(src, src, CV_BGR2GRAY);
dst.create(cvRound(src.rows*ky), cvRound(src.cols*kx), src.type());
int height = src.rows;
int width = src.cols;
dst.setTo();
const int dx = cvRound( / kx);
const int dy = cvRound( / ky);
for (size_t i = , x = ; i < height; i += dy, x++)
{
for (size_t j = , y = ; j < width; j += dx, y++)
{
dst.at<uchar>(x,y) = areaAverage(src, Point(j, i), Point(j + dx, i + dy));
}
} }
//--------求一个矩形区域像素平均值
uchar areaAverage(Mat& src, Point& leftPoint, Point& rightPoint)
{
Mat roi = src(Rect(leftPoint, rightPoint));
const int height = roi.rows;
const int width = roi.cols;
float sumPix = ;
for (size_t i = ; i < height; i++)
{
for (size_t j = ; j < width; j++)
{
sumPix += (roi.at<uchar>(i, j) / (height*width));
}
}
return sumPix;
}

 图像旋转

       没怎么看懂书上的代码

《opencv学习》 之 几何变换的更多相关文章

  1. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  2. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  3. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  4. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  5. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  6. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  7. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  8. paper 93:OpenCV学习笔记大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...

  9. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  10. OpenCV学习笔记(一)安装及运行第一个OpenCV程序

    1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以 ...

随机推荐

  1. 在intent-filter中的配置

    1.scheme约束和mimetype的数据类型,这些都可以自己去定义. 2.但是由于在MainActivity却不能直接将这两个参数分开来写,例如setdata和settype,这样会互相删除. 因 ...

  2. spring boot 好文

    配置: https://www.jianshu.com/p/3af2a8721d86 : Spring Boot启动报错:Whitelabel Error Page 分页: https://bbs.c ...

  3. from表单的分向提交

    一:需求: 思路:document.form.action,表单分向提交,javascript提交表单同一个表单可以根据用户的选择,提交给不同的后台处理程序.即,表单的分向提交.如,在编写论坛程序时, ...

  4. LG3898 [湖南集训]大新闻

    题意 题目描述 **记者弄了个大新闻,这个新闻是一个在 [0,n) 内等概率随机选择的整数,记其为 x.为了尽可能消除这个大新闻对公众造成的不良印象,我们需要在 [0,n)内找到某一个整数 y,使得 ...

  5. Nolia 给CC添加过滤器

    思路: 1.使用jqurey-tagput ,做得不好看,领导不满意 2.使用bootstrap select2这个控件, 思路: 1.添加css和js的文件 2.添加标签的时候,根据id拼接标签,a ...

  6. gitlab操作

    一.初始设置 在某一个具体的project下: 1.gitlab中删除一个工程Setting-->General-->Advanced settings-->RemoveProjec ...

  7. Cocos2d-X数据、动作、消息的基本操作

    加入类的create方法: CREATE_FUNC(ClassName) 使用这个宏能够为类加入一个create方法. 创建类的对象时一律用Class::create()的形式. 在CREATE_FU ...

  8. ORTP库移植

    转载,侵删 1.ORTP的引入 为什么要使用RTP:http://blog.51cto.com/ticktick/462746RTP协议分析:http://www.xuebuyuan.com/7399 ...

  9. 辅助字符串处理类:org.apache.commons.lang3.StringUtils

    api 地址:http://commons.apache.org/proper/commons-lang/apidocs/index.html?index-all.html StringUtils 常 ...

  10. Apache Derby数据库 安装、知识点

    Apache Derby数据库 安装: 下载路径:http://archive.apache.org/dist/db/derby/ 出处:http://www.yiibai.com/hive/hive ...