《opencv学习》 之 几何变换
图像平移:
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学习》 之 几何变换的更多相关文章
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- opencv学习笔记(四)投影
opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- paper 93:OpenCV学习笔记大集锦
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
首页 视界智尚 算法技术 每日技术 来打我呀 注册 OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...
- OpenCV学习笔记(一)安装及运行第一个OpenCV程序
1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以 ...
随机推荐
- shell 脚本实战笔记(7)--集群网络相关知识和环境搭建
前言: 对网络相关的知识, 做下笔记. 包括IP地址A/B/C的分类, 静态地址的配置/DNS配置, 以及网卡相关信息查看. *) A/B/C/D类网络地址的划分 IP地址=网络地址+主机地址 或 I ...
- MATLAB安装教程
1.资源下载 下载官方安装包R2015b_win64.(文件太大,没上传资源) 下载破解文件包,解压其中的相应压缩包(一般是win64那个压缩包) 下载地址:链接:http://pan.baidu.c ...
- HDU2037:今年暑假不AC
Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!" & ...
- 【网络编程】socket异常
Socket异常 客户端异常 java.net.ConnectException: Connection refused: connect. 该异常发生在客户端进行new Socket(ip, por ...
- Oracle C#处理时间类型的Insert
首先如果直接 parm.Value=DateTime.Now; insert into table (TheTime)Value(@parm); 执行sql就会报错 ----------- ...
- jQuery如何取得HiddenField值(转)
<f:HiddenField runat="server" ID="cat_id" Text="ssss"/> var strD ...
- jsp渲染
SP与Servlet什么关系?JSP和ASP什么关系?下面我们一一来探讨. 第一个.jsp文件:<html> <head> <title> ...
- each与list的用法(PHP学习)
1.each的用法 先看API array each ( array &$array ) api里是这么描述的:each — 返回数组中当前的键/值对并将数组指针向前移动一步 我们先来看看返回 ...
- 服务端REST与SOAP的探讨(转)
声明: 闲来逛论坛看到一篇不错的文章,阅读后受益匪浅. 本文从一个简单的应用场景出发,使用REST和SOAP两种不同的架构风格实现,通过对REST与SOAP Web服务具体对比,旨在帮助读者更深刻理解 ...
- 创建mysql 用户并限定其操作主机 和 数据库
参考链接 http://www.cnblogs.com/top5/archive/2010/09/14/1825571.html ******** GRANT ALL ON push.* TO pus ...