opencv学习之路(11)、图像几何变换
一、图像缩放
#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)、图像几何变换的更多相关文章
- OpenCV成长之路:图像直方图的应用
OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...
- OpenCV成长之路:图像滤波
http://ronny.blog.51cto.com/8801997/1394138 OpenCV成长之路:图像滤波 2014-04-11 14:28:44 标签:opencv 边缘检测 sobel ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- 第十三节,OPenCV学习(二)图像的简单几何变换
图像的简单几何变换 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排 适当的几何变换可以最大程度地消除由于成像角度.透视关系乃至镜头自身原因所造成的几何失真所产生的的负面影响. 一.图像 ...
- opencv学习之路(13)、图像阈值化threshold
一.图像阈值化简介 二.固定阈值 三.自适应阈值 #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat src ...
- opencv学习之路(30)、分水岭算法及图像修补
一.简介 二.分水岭算法 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat srcImg = ...
- opencv学习之路(12)、图像滤波
一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...
- opencv学习之路(8)、基本图像运算——加减与或
一.图像加法 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...
- opencv学习之路(7)、访问图像像素
一.动态地址访问 #include <opencv2/opencv.hpp> #include<iostream> using namespace cv; using name ...
随机推荐
- Jmeter安装与配置
Jmeter下载与安装配置 1.下载地址:https://jmeter.apache.org/ Apache Jmeter首页,点击 Download Releases 然后,选择,安装版本,有li ...
- Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔
转自:https://blog.csdn.net/dcrmg/article/details/52561656 一. 图像金字塔 图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像 ...
- ProxySQL(读写分离)部署
proxySQL是MySQL的中间件产品,是灵活强大的代理层,实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载配置,故障切换和一些SQL 过滤功能 环境: 192.1 ...
- Nodejs【单机】多进程模式集群
Nodejs[单机]多进程模式集群实例: 1.安装:npm install -s cluster 2.服务代码: var debug = require('debug'); var express = ...
- Message对象
一)描述 1: 每一个Message对象都包含两个对象: (1)google::protobuf::Descriptor 描述对象,是Message所有Filed的一个集合,它又包含了FieldDes ...
- sitecore中的两种编辑工具介绍
在Sitecore中,有两种编辑工具,您可以在其中创建和编辑网站上的内容: 内容编辑器 - 专为熟悉Sitecore及其包含的功能的经验丰富的内容作者而设计的应用程序. 体验编辑器 - 一种直观的编辑 ...
- 压缩和解压缩(I)
ZipArchive 压缩方法 -(void)zipArchiveWithFiles { //创建解压缩对象 ZipArchive *zip = [[ZipArchive alloc]init]; / ...
- Jmeter自己jar包的引用
1.编写清空指定文件夹里所有内容的jar包 package org.na;import java.io.File;public class deletedir { public static b ...
- Linux基础命令---显示文本look
look 显示文件中以特定字符串开始的行.在look执行二进制搜索时,必须对文件中的行进行排序.如果未指定文件,则使用文件“/usr/share/dict/words“,只比较字母数字字符,忽略字母字 ...
- 查询在某一个时间段内的sql(oracel)
( to_char(t.TUIJIAN_TIME, 'yyyy-MM-dd') between #{begin_time} and #{end_time} )