图像平移:

      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. win+linux双系统安装笔记

    1.出现win与linux只能引导之一启动,此时启动linux并更改启动文件可以用linux自带的grub2引导启动 2.ubuntu64位安装时需要联网,因为其有bug,镜像文件中缺少gurb2,需 ...

  2. fiddler Android抓包与弱网

    tools rules-ctrl+R 搜索 oSession["request-trickle-delay"] = rules-perfromance-simulate modem ...

  3. Shader的函数公式以及使用的场景

    Shader 是干什么的? 它的作用可以先简单理解为对屏幕上的物体,进行颜色处理. 而大家都知道,所有计算机,处理颜色的当然是显卡,也就是 GPU . 所以我们写 Shader 的目的就是告诉 GPU ...

  4. MySQL主从数据库配置

    使用工具 MySQL数据版本:5.6.36-log. 两台云服务器(Linux系统) 首先,需要在Linux系统下安装MySQL,具体步骤可以参考这里,并且确保两台主机可以相互访问,可以直接ping一 ...

  5. linux搜索命令之find和grep

    在使用linux时,经常需要进行文件查找,其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...

  6. java调用.net的webservice

    目录(?)[-] 一参考文献 二概述 三实例 注意点   一.参考文献 1. http://www.cnblogs.com/xuqifa100/archive/2007/12/13/993926.ht ...

  7. NOSQL之REDIS

    Redis是NoSQL中比较常典型的一个非关系型数据库,在日常工作中也是最为常见的.Redis是一个由C语言编写的开源的.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据 ...

  8. 前端基础之CSS快速入门

    前一篇写了我们的Html的常用组件,当然那些组件在我们不去写样式的时候都是使用的浏览器的默认样式,可以说是非常之丑到爆炸了,我们肯定是不能让用户去看这样丑到爆炸的样式,所以我们在这里需要使用css样式 ...

  9. mysql 中find_in_set()和in()用法比较

    mysql 中find_in_set()和in()用法比较 在mysql中in可以包括指定的数字,而find_in_set()用于特定的数据类型. find_in_set 函数使用方法 个例子来说:有 ...

  10. android onSaveInstanceState()及其配对方法。

    转自:http://blog.chinaunix.net/uid-22985736-id-2977672.html onSaveInstanceState() 和 onRestoreInstanceS ...