OPENCV-3 学习笔记

OPENCV-3 学习笔记

imread()读入图,第一个参数,const string&类型的filename,填我们需要载入的图片路径名, 第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。

namedWindow()用于创建一个窗口,const string&型的name,即填被用作窗口的标识符的窗口名称,int 类型的flags ,窗口的标识。

imshow()显示一幅图像,第一个参数,const string&类型的winname,填需要显示的窗口标识名称,第二个参数,InputArray 类型的mat,填需要显示的图像。

imwrite()输出图像到文件,第一个参数,const string&类型的filename,填需要写入的文件名就行了,带上后缀,比如,“hehe.jpg”。第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。第三个参数,const vector&类型的params,表示为特定格式保存的参数编码,它有默认值vector(),所以一般情况下不需要填写。

基本数据结构

1、Mat类—基础图像容器

由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵的指针。

Mat A,C; //创建信息头部分
A = imread("1.jpg",CV_LOAD_IMAGE_COLOR); //为矩阵开辟内存
Mat B(A); //使用拷贝构造函数
C=A;
//ROI
Mat D = (A,Rect(10,10,100,100)); //使用矩形界定
Mat D = A(Range:all(),Range(1,3)); //使用行和列界定

结构:

  • M.data  数据区域的指针
  • M.dims  矩阵维度
  • M.sizes  维度
  • M.elemSize()  每个元素占的字节空间大小,与元素类型相关,如CV_8U
  • M.step[]  用来计算元素地址, M.step[i] 表示所有比i大的维度所占空间大小

2、Vec—模板类,主要用于存储数值向量

//示例
//可用来定义任意类型的向量,uchar、short、int、float、double
Vec<double, 5> Vector; // 定义一个存放5个double型变量的向量 //使用[]访问Vec向量成员
Vector[0]=10010;//支持运算类型
v1 = v2 + v3  
v1 = v2 - v3  
v1 = v2 * scale  
v1 = scale * v2  
v1 = -v2  
v1 += v2  
v1 == v2, v1 != v2  
norm(v1) (euclidean norm)  

3、Scalar类—从Vec类引出的模板类,是一个可存放4个元素的向量,主要用于传递和读取图像中的像素值

//定义BGR三个通道的颜色(蓝色、绿色、红色)
cv::Scalar myScalar;  
myScalar = cv::Scalar(255,255,255); //读取彩色图像像素值(三通道)
cv::Mat pImg = cv::imread("1.jpg", 1); //1表示以彩色图像读入
if (!pImg.data)return 0;
int x = 100, y = 100; //定义点
cv::Scalar pixel = pImg.at<Vec3b>(x, y);//选取位置
cout << "B chanel of pixel is = " << pixel.val[0] << endl;
cout << "G chanel of pixel is = " << pixel.val[1] << endl;
cout << "R chanel of pixel is = " << pixel.val[2] << endl;

4、Point类—用于表示2维坐标(x,y)

//定义图像中的点
cv::Point pt =  Point(10, 10);
//二维空间中的点
cv::Point2d、cv::Point2d32f(指定为浮点型)
//三维空间中的点
cv::Point3d
//运算类型
pt1 = pt2 + pt3;  
pt1 = pt2 - pt3;  
pt1 = pt2 * a;  
pt1 = a * pt2;  
pt1 += pt2;  
pt1 -= pt2;  
pt1 *= a;  
double value = norm(pt); // L2 norm  
pt1 == pt2;  
pt1 != pt2;

5、Size类—可表示一幅图像或一个矩形的大小。它包含宽、高2个成员:width , height还有一个面积函数area()

//定义
cv::Size size(int w, int h); 

6、Rect类—用于定义2维矩形的模板类,可以用来定义图像的ROI区域。

//定义
cv::Rect rect(x, y, width, height);
//选取ROI区域
cv::Mat pImg = imread("1.jpg",1);  
cv::Rect  rect(80,20,100,100);//(x,y)=(80,20),w=100,height=100  
cv::Mat  roi = cv::Mat(pImg, rect);  
cv::Mat  pImgRect = pImg.clone();  
cv::rectangle(pImgRect,rect,cv::Scalar(0,255,0),2);  
cv::imshow("original image with rectangle",pImgRect);  
cv::imshow("roi",roi);  
cv::waitKey();  

7、RotatedRect类—特殊的矩形。这个类通过中心点,宽度和高度和旋转角度来表示一个旋转的矩形。

/*定义
center:中心点坐标Point2f类型
size:矩形的宽度和高度,Size2f类型
angle:顺时针方向的旋转角度(单位°),float类型
*/
RotatedRect(const Point2f& center, const Size2f& size, float angle);  //RotatedRect  cv::Point2f center(100, 100);cv::Size2f size(100, 50);float angle = 45;// try 10, 30, 45  RotatedRect rRect(center, size, angle);cv::Mat image(200, 200, CV_8UC3, cv::Scalar(0));Point2f vertices[4];rRect.points(vertices);for (int i = 0; i < 4; i++)line(image, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 0));Rect brect = rRect.boundingRect();rectangle(image, brect, Scalar(255, 0, 0));imshow("rectangles", image);waitKey(0);

8、Rang类—表示范围

Mat m(300,300,CV32F);
Mat part = m(Range::all(), Range(20, 200));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端换行显示,后端返回br

转载于:https://www.cnblogs.com/lml-lml/p/9597547.html

MySql随笔part3 表操作

一:什么是表 表(table): 表似一种结构化的文件,可用来存储某种特定类型的数据.表中的一条记录有对应的标题,标题称之为表的字段 二:创建表 1 create table table_name( 2 字段名1 类型[(宽度) 约束条件], 3 字段名2 类型[(宽度) 约束条件], 4 字段名3 类型[(宽度) 约束条件] 5 …

node --- 监听文件变化(静态、动态、子进程)

静态版本:监听的文件名写死了 // watcher.js use strict const fs require(fs); fs.watch(target.txt, () > console.log(File changed!)); console.log(Now watching target.txt for changes...);命令行启动 node watcher.js动态版本:在命令行输入需要监听的文件名. pr…

es6 --- Promise封装读取文件操作

Promise: es6中为了解决回调地狱问题而产生的 Promise的参数 Promise的参数是一个函数.每个Promise在实例化时,都会立即执行参数里的函数 const p new Promise(()>{console.log(1); })// 解释了上面的第2条Promise参数的参数 Promise的参数(函数),默认有2个参数(resol…

杂项:E-Learning

ylbtech-杂项&#xff1a;E-Learning1.返回顶部 1、E-Learning&#xff1a;英文全称为&#xff08;Electronic Learning&#xff09;&#xff0c;中文译作“数字&#xff08;化&#xff09;学习”、“电子&#xff08;化&#xff09;学习”、“网络&#xff08;化&#xff09;学…

css --- flex布局的应用(between)

between 想把发布时间放在左边,点击放在右边 页面结构如下: 可以看到发布时间和点击是在类 .mui-ellipsis 下.使用css3的 flex 布局中的: space-between .mui-ellipsis{display: flex;justify-content: space-between; }

WeUI

介绍&#xff1a; WeUI是微信设计团队为微信网站开发量身定做的微信类UI界面&#xff0c;旨在改善和规范微信用户体验。包括组分如button&#xff0c;cell&#xff0c;dialog&#xff0c;progress&#xff0c;toast&#xff0c;article&#xff0c;actionsheet&#xff0c;icon…

vue --- 全局配置过滤函数,使用moment函数来格式化时间

效果1 YYYY-MM-DD 效果2 YYYY-MM-DD HH:mm:ss 配置注意事项 由于时间格式化,在大多数页面中都会用到,因此建议配置在全局中 使用moment函数 -> http://momentjs.cn/ npm 安装 # 命令行 cnpm i moment -S在全局中配置 // main.js import moment from momentVue.f…

2018ICPC南京赛区网络赛J Sum(素数筛+找规律)

素数筛链接&#xff1a;https://blog.csdn.net/dl962454/article/details/76595623 【题意】 f(i)&#xff1a;能拆成两个数的乘积&#xff0c;并且这两个数要求没有平方因子&#xff0c;并且两个数的位置互换算两种方案。 最后求f(1)f(2)f(3)...f(n&#xff09;。 【解题思路】…

vue --- 使用vue-router获取带参数的路由

希望的效果如下: 2个路由: 点击如下 步骤. 使用 router-link 来指定路由路径在router.js中指定 路径的 事件处理函数(对应的组件)创建对应的组件 router-link 找到一个区别各个列表的属性(id),将其作为参数传递到路由中to是vue-router中用来绑定路由的属性由于需要进行计…

.Net Core2.*学习手册

1.net core 基础知识解析(创建一个.net core网站)(视频录制) 1.1 Startup解析(没写)   1.2 目录结构分析(没写)   1.3 使用静态文件(没写)   1.4 Controller(没写)   1.5 Razor页面(没写) 1.6.net core appsetting/获取配置文件   2.创建.net core项目 2.1 创建一个项…

java中static详解

这个博主写的总结很好,这里附上链接http://www.cnblogs.com/dolphin0520/p/3799052.html 下面进行简要总结: 在《Java编程思想》P86页有这样一段话&#xff1a; “static方法就是没有this的方法。在static方法内部不能调用非静态方法&#xff0c;反过来是可以的。而且可以在没有…

vue --- 全局注册子组件,并导入全局的子组件

假设: 需要一个评论的模块comment由于comment在多个页面中可能会复用.于是创建一个comment.vue 步骤: 创建comment.vue在需要引用的位置使import comment from ../subcomponent/Comment.vue 导入子组件在Vue实例中使用components属性注册注册的规则: “comment-box” : comm…

7. 反转整数

7. 反转整数 描述 给定一个 32 位有符号整数&#xff0c;将整数中的数字进行反转。 示例 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储 32 位有符号整数&#xff0c;其数值范围是 [−2^31, 2^31 − 1]…

小朋友学C++(1)

Hello World! 在学C之前&#xff0c;最好先学习一下C语言 让我们先运行一段简单的代码&#xff0c;编译器可以使用 在线C编译器 或 Xcode(苹果系统) 或Dev C&#xff08;Windows系统&#xff09;。 #include <iostream> using namespace std; int main() { cout <<…

mysql_表_操作

1、创建表 # 基本语法&#xff1a; create table 表名(列名 类型 是否可以为空 默认值 自增 主键&#xff0c;列名 类型 是否可以为空 )ENGINEInnoDB DEFAULT CHARSETutf8not null # 不可以为空 default 1 # 默认值为1 auto_increment # 自增 primary …

css --- 手机端,留言模块的样式

效果如下: 代码: 说明:用到了mint-ui,需要先安装mt-button的导入: import { Button } from ‘mint-ui’mt-button的使用: Vue.component(Button.name, Button)更多 http://mint-ui.github.io/ // comment.vue <template><div class"comment-container">…

yii多表查询--学习随笔

今天自己做一个小demo&#xff0c;为了不要冗余字段&#xff0c;需要进行多表联合查询、搜索 yii中&#xff0c;用model来映射数据库&#xff08;其实好多框架都是这么搞的&#xff09;&#xff0c;一个模型类通常有一个search模型类跟着一起 废话不多说了&#xff0c;首先&…

node --- 创建一个Socket服务器

流程: 会开发一个监听文件改变的应用然后客户端使用命令行工具(telnet)连接服务端服务端在监听到文件变化后,会发送数据给客户端 监听文件变化 node 的fs模块:watch方法用于监听文件的变化,可以在内存分配一个区域,来专门用于监听文件变化,并执行该区域内指定的回调函数 //…

node --- 创建一个Socket客户端连接到服务器

描述: net.createrServer().listen(60300) 监听客户端访问net.connect({ port: 60300 }) 访问服务器 服务器: 一个很简单的监听文件改变的服务器每当监听的文件改变了,将信息通过json的格式传递给连接到的客户端 connection.write // 01、net-watcher.js use strict const …