图像平移:

      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. Mac锁屏快捷键

    Mac 锁屏快捷键 直接盖 -- 推荐,因为帅 control + command + Q -- 真正意义上的锁屏.可行 control + shift + Power -- 只是黑屏,再次打开不需要 ...

  2. DHT11

    主机开始发送信号:先拉低至少18ms,然后在拉高20~40us,然后DHT11响应, 拉低数据线40~50us,接着在拉高40~50us,之后再开始输出数据. 输出0是的时序:先12.14us低电平, ...

  3. ZOJ2067 经典 DP(单调队列优化)

    题目:一个由‘.’和‘#’组成矩形,统计里面'.'组成的矩形的个数. 点击打开链接 自己写挂了,懒得搞了 #include <stdio.h> #include <string.h& ...

  4. matplotlib 双y轴绘制及合并图例

    关键函数:twinx() refer to: https://www.cnblogs.com/Atanisi/p/8530693.html

  5. PipelineDB 1.0.0 发布——使用标准的pg 扩展开发模型

    PipelineDB 1.0.0 发布已经发布了,现在的已经成为一个标准的pg 扩展了,语法也有变动 create continous view 修改为了view,create streaem 修改为 ...

  6. Vault 0.10包含了web ui

    Vault 是一个很不错的访问控制,secret api key 管理工具 新的0.10 有好多新的功能的添加,最棒的是有一个web ui 了 包含的新特性如下: K/V Secrets Engine ...

  7. Oracle 多行合并一行 方法

    假如有如下表,其中各个i值对应的行数是不定的 SQL> select * from t; I A          D ---------- ---------- --------------- ...

  8. IBM WebSphere MQ介绍安装以及配置服务详解(转)

    首先介绍一下MQ MQ消息队列的简称是一种应用程序对应用程序的通信方法.说白了也就是通过队列的方式来对应用程序进行数据通信.而无需专用链接来链接它们. MQ的通讯方式 1.数据报的方式 Datagra ...

  9. Linux下的Nginx、php、mysql、apache部署

    待补充,先搞几个博客链接: https://www.cnblogs.com/Candies/p/8282934.html http://sujianjob.com/2017/12/18/yum%E5% ...

  10. bzoj 3572 [Hnoi2014]世界树——虚树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3572 关于虚树:https://www.cnblogs.com/zzqsblog/p/556 ...