OpenCV——图像的平移旋转
1.学习图像数据格式Mat
像素就是把图形分割成很多大小相等的小正方形,其中每一个都是一个像素。我们常见的800*600的图形,800代表宽度,600代表高度。
灰度图像就是黑白灰,只有这三种颜色,其实就是不同程度的灰色。灰度图像中的像素用8位无符号数,0表示黑色,255表示白色,中间的则为不同程度的灰色。8位无符号数就是2的8次方,即255。一个8位色的像素,可以显示的颜色为2的八次方,0到255,就是能显示出256中颜色。
**需要掌握的基础函数操作:
Mat img; //定义一个可以存储图像的空间名为img
imread(“e:\1.jpg”); //读取路径中的图像
Imwrite(“e:\2.jpg”,img); //将img中存储的图像保存到e盘并命名为2.jpg
if(img.empty()); //如果img中没有存储图像,则img.empty()=1否则为0
namedWindow("原图像"); //命名一个窗口的名称为“原图像”
imshow("原图像", img); //展示img图像到“原图像”窗口
destroyWindow("原图像"); //销毁(关闭)窗口
cvtColor(img,img,CV_BGR2GRAY); //将img图转换为灰度图存到img中
img.at<Vec3b>(i, j)[0] = 0; //img彩色图像中坐标为(i,j)的像素点,将其蓝通道设置为黑色
Matdst = img.clone(); //将img复制存储到dst中
2图片的提取
#include<opencv2\opencv.hpp>
using namespace cv;
int main()
{Mat picture = imread("Jmu.jpg");//图片必须添加到工程目录下imshow("测试程序", picture);waitKey(0);
}
using namespace cv;
int main()
{Mat picture = imread("Jmu.jpg");//图片必须添加到工程目录下imshow("测试程序", picture);waitKey(0);
}
运行结果:
3.图形的读取、转灰度图、显示、保存
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char **argv )
{Mat img = imread("h:\\1.jpg");//将一张图片存储,读取到imgMat grayimg;cvtColor(img, grayimg, CV_BGR2GRAY);//将原图转化成灰度图片,存储到grayimgimwrite("h:\\grayimg.jpg", grayimg);
if (img.empty())//如果图片不存在的情况{cout << "error"<<endl;system("pause");return 0;}
imwrite("h:\\2.bmp", img);//将图片转化为其他格式存储cout << "像素列数(宽度):" << img.cols << endl << "像素行数(高度):" << img.rows;
namedWindow("原图像");//命名一个图像窗口imshow("原图像",img);//显示图像cvtColor(img, img, CV_BGR2GRAY);namedWindow("灰度图像");imshow("灰度图像",img);
system("pause");//销毁窗口destroyWindow("原图像");destroyWindow("灰度图像");
return 0;
}
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char **argv )
{Mat img = imread("h:\\1.jpg");//将一张图片存储,读取到imgMat grayimg;cvtColor(img, grayimg, CV_BGR2GRAY);//将原图转化成灰度图片,存储到grayimgimwrite("h:\\grayimg.jpg", grayimg);
if (img.empty())//如果图片不存在的情况{cout << "error"<<endl;system("pause");return 0;}
imwrite("h:\\2.bmp", img);//将图片转化为其他格式存储cout << "像素列数(宽度):" << img.cols << endl << "像素行数(高度):" << img.rows;
namedWindow("原图像");//命名一个图像窗口imshow("原图像",img);//显示图像cvtColor(img, img, CV_BGR2GRAY);namedWindow("灰度图像");imshow("灰度图像",img);
system("pause");//销毁窗口destroyWindow("原图像");destroyWindow("灰度图像");
return 0;
}
通常在结尾return 0;前面使用waitKey(0);用于观测实验结果,否则实现结果往往一闪而过。
或者参考使用system(“pause”);
4.图片的平移
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void imMove(Mat img, Mat &dst, int x, int y)
{int MaxHeight = img.rows;//设定最大高度为图形高度int MaxWidth = img.cols;//设定最大宽度为图形宽度int i;int j;for (i = 0 ; i < MaxHeight; i++){for (j = 0; j < MaxWidth; j++){//判断位置后将像素逐个赋予到新的位置if (i - x > 0 && i - x < MaxHeight&&j - y>0 && j - y < MaxWidth)dst.at<Vec3b>(i, j) = img.at<Vec3b>(i - x, j - y);else{dst.at<Vec3b>(i, j)[0] = 0;dst.at<Vec3b>(i, j)[1] = 0;dst.at<Vec3b>(i, j)[2] = 0;
}}}
}
int main(void)
{Mat img = imread("h:\\1.jpg");Mat dst = img.clone();imshow("原图", img);
int x, y;cout << "水平移动的距离" << endl;cin >> x;cout << endl << "输入垂直移动距离";cin >> y;imMove(img, dst, y, x);imshow("平移后的图像",dst);imwrite("h:\\2.jpg", dst);//保存平移后的图片waitKey(0);
return 0;
}
#include<iostream>
using namespace std;
using namespace cv;
void imMove(Mat img, Mat &dst, int x, int y)
{int MaxHeight = img.rows;//设定最大高度为图形高度int MaxWidth = img.cols;//设定最大宽度为图形宽度int i;int j;for (i = 0 ; i < MaxHeight; i++){for (j = 0; j < MaxWidth; j++){//判断位置后将像素逐个赋予到新的位置if (i - x > 0 && i - x < MaxHeight&&j - y>0 && j - y < MaxWidth)dst.at<Vec3b>(i, j) = img.at<Vec3b>(i - x, j - y);else{dst.at<Vec3b>(i, j)[0] = 0;dst.at<Vec3b>(i, j)[1] = 0;dst.at<Vec3b>(i, j)[2] = 0;
}}}
}
int main(void)
{Mat img = imread("h:\\1.jpg");Mat dst = img.clone();imshow("原图", img);
int x, y;cout << "水平移动的距离" << endl;cin >> x;cout << endl << "输入垂直移动距离";cin >> y;imMove(img, dst, y, x);imshow("平移后的图像",dst);imwrite("h:\\2.jpg", dst);//保存平移后的图片waitKey(0);
return 0;
}
运行结果:
5.图片的旋转,缩放
getRotationMatrix2D(1.图像旋转中心, 2.旋转角度 ,3.缩放尺寸)
warpAffine(1.输入源图像 ,2.输出图像,3.仿射变换矩阵,4.输出图像的尺寸)
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{//Point2f就类似定义一个float型Mat img = imread("h:\\1.jpg");Point2f center = Point2f(img.cols / 2, img.rows / 2);//设定旋转中心double angle;//旋转角度double scale;//缩放尺度printf("输入旋转的角度:");cin >> angle;printf("输入缩放的尺度:");cin >> scale;
Mat rotateMat;rotateMat = getRotationMatrix2D(center, angle, scale);//旋转中心,旋转角度,缩放尺度Mat rotateImg;warpAffine(img, rotateImg, rotateMat, img.size());//输入源图像,输出图像,仿射变换矩阵,输出图像尺寸imshow("原图像", img);imshow("旋转后的图像", rotateImg);imwrite("h://2.jpg", rotateImg);//存储旋转后的图片waitKey(0);system("pause");return 0;
}
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{//Point2f就类似定义一个float型Mat img = imread("h:\\1.jpg");Point2f center = Point2f(img.cols / 2, img.rows / 2);//设定旋转中心double angle;//旋转角度double scale;//缩放尺度printf("输入旋转的角度:");cin >> angle;printf("输入缩放的尺度:");cin >> scale;
Mat rotateMat;rotateMat = getRotationMatrix2D(center, angle, scale);//旋转中心,旋转角度,缩放尺度Mat rotateImg;warpAffine(img, rotateImg, rotateMat, img.size());//输入源图像,输出图像,仿射变换矩阵,输出图像尺寸imshow("原图像", img);imshow("旋转后的图像", rotateImg);imwrite("h://2.jpg", rotateImg);//存储旋转后的图片waitKey(0);system("pause");return 0;
}
6.实验楼 实验1
解释器
Python 是一个脚本语言,你可以在 Python 解释器中直接写代码或者将代码写到一个文件里,然后执行这个文件(即脚本文件)。首先,我们从使用解释器开始,打开终端,键入python3 并回车。这个时候解释器便工作于交互模式。按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器。
脚本文件
先启动 Vim 并编辑 China。py,启动后不要乱按键。然后按 i 键进入插入模式,此时你可以看到左下角有 “插入” 两个字,现在你可以键入代码了。然后按 Esc 键退出插入模式,再键入 :wq 回车,Vim 就会保存文件并退出。要运行脚本文件 China.py,还要为文件添加可执行权限: chmod +x helloworld.py,然后执行脚本文件:$ ./helloworld.py
完成本实验后,明白了如何使用交互模式的 Python3 解释器,如何简单使用 vim 编写脚本文件并执行这个脚本文件,要特别注意的是,Python 使用缩进来定义语句块,缩进是 Python 语法的一部分,这与其它大多数语言不同。
OpenCV——图像的平移旋转相关推荐
- Python OpenCV 图像平移,取经之旅第 10 天
今天是持续写作的第 43 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客学习 OpenCV 中关于图像平移的方法,核心学习到的方法是 warpAffine . 取经之旅第 ...
- OpenCV 图像旋转、平移、缩放
本文是 OpenCV图像视觉入门之路的第7篇文章,本文详细的进行了图像的缩放 cv2.resize().旋转 cv2.flip().平移 cv2.warpAffine()等操作. OpenCV 图像旋 ...
- 【数字图像处理】实验一 图像的平移,缩放和旋转(vs2017+opencv)
文章目录 一. 平移 1.思路 2.实现代码 二.缩放 1.思路 2.代码实现 三.旋转变换 1.思路 对文章内容如有异议欢迎在评论区提问 代码包: 数字图像平移.旋转.缩放 一. 平移 1.思路 新 ...
- 【OpenCV 例程200篇】25. 图像的平移
[OpenCV 例程200篇]25. 图像的平移 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 平移是物体位置在水平 ...
- 图像缩放、旋转、翻转、平移
本文介绍几种常见的图像几何变换方法. 1. 图像缩放 图像缩放就是将源图像中的像素点经过算法映射到目标图像的像素点的过程,即找出目标图像中的像素点Pd(Xd,Yd)对应的源图像的像素点Ps(Xs,Ys ...
- opencv图像旋转和翻转,cv2.flip,cv2.rotate
目录 翻转图像 图像旋转 翻转图像 opencv中使用cv2.filp可以实现图像翻转 def flip(src, flipCode, dst=None) src:输入图像 flipCode:flip ...
- 【OpenCV 例程200篇】25. 图像的平移(cv2.warpAffine)
『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程200篇]25. 图像的平移 平移是物体位置在水平和垂直方向的移动. 像素点 (x,y) 沿 x ...
- Python图像处理丨图像缩放、旋转、翻转与图像平移
摘要:本篇文章主要讲解Python调用OpenCV实现图像位移操作.旋转和翻转效果,包括四部分知识:图像缩放.图像旋转.图像翻转.图像平移. 本文分享自华为云社区<[Python图像处理] 六. ...
- opencv图像旋转
转自:http://download.csdn.net/source/2642701 /* 程序名:rotate.c 功能:读入图像文件,做图像旋转转,然后显示图像在屏幕上 */ #include ...
最新文章
- jQuery validation插件的使用(转)
- NIOS生成Nios libaray
- 10一个应用阻止关机贴吧_手机该不该每天关机一次?看完才知道这么多年白用了...
- 数据产品-数据分析和可视化工具Excel基础使用
- Mac系统中桌面图片和用户头像图片的路径
- powerDesigner 把name项添加到注释(comment),完美方案!
- Api demo源码学习(4)--App/Activity/Dialog --Activity以Dialog形式呈现
- 【图像增强】基于matlab GUI图像双边滤波【含Matlab源码 1492期】
- matlab 求切平面,求二次曲面的切平面的简便方法
- 特斯拉灯光秀指南「GitHub 热点速览 v.22.01」
- 使用Python根据视频链接下载MP4视频
- 中国移动国际mCloud体验再次升级,助力企业远程协同数字化转型
- 松下P2卡MXF视频恢复方法
- 主流实时流处理计算框架Flink初体验
- 2011年高考模拟命题作文读我
- 第48章 MDK的编译过程及文件类型全解
- AspNetCore 3.1(ABP.Next)集成MiniProfile(简要)
- 英特尔笔试题小整理DIY
- python学习笔记之doc和docx的格式转换
- 【ceph相关】pcie ssd相关问题处理