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,一经查实,立即删除!

相关文章

vue --- vue-router(项目模式的导入)

main.js // main.js // 1.1 导入路由的包 import VueRouter from vue-router// 1.2 安装路由 Vue.use(VuerRouter)// 1.3 导入自己的router.js模块 import router from ./router.js// 1.4 挂载router对象在vm实例上 const vm new Vue({el: #app,router })app.vue 原本的 a …

Innodb存储引擎——非聚集索引

如果给表定义了主键&#xff0c;那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构&#xff0c;也就是「平衡树」结构&#xff0c;换句话说&#xff0c;就是整个表就变成了一个索引&#xff0c;这就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键&#x…

cd 切换目录

1. 功能说明 cd是“change directory”中每个氮气的首字母缩写功能是重当前工作目录切换到指定的工作目录&#xff1b;cd是内建命令。 2. 语法格式 cd [option] [dir] cd 选项 目录 3.使用范例 范例1&#xff1a; 切换到/home目录 [rootlocalhost sysconfig]# pwd /etc/s…

OPENCV-4 学习笔记

OPENCV-4 学习笔记 ROI—设定感兴趣的区域&#xff08;region of interest&#xff09; 定义&#xff1a; Mat imageROI; //方法一&#xff1a;通过Rect指定矩形区域 imageROIimage(Rect(500,250,logo.cols,logo.rows)) //方法二 指定感兴趣行或列的范围&#xff08;Ran…

vue --- mintUI中Swipe(轮播图)的使用

引入 // main.js // 导入包 import { Swipe, SwipeItem } from mint-ui// 注册 Vue.component(Swipe.name, Swipe); Vue.component(SwipeItem.name, SwipeItem);放在需要显示的位置 // HomeContainer.vue(首页 -> 组件) <template><div><!-- 轮播图区域 --…

前端换行显示,后端返回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 …

OPENCV-5 学习笔记

OPENCV-5 学习笔记 线性滤波 方框滤波——boxblur函数均值滤波&#xff08;邻域平均滤波&#xff09;——blur函数高斯滤波——GaussianBlur函数中值滤波——medianBlur函数双边滤波——bilateralFilter函数 关于滤波和模糊—–滤波可分低通滤波和高通滤波两种。而高斯滤波是…

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…

redis学习总结

一、redis工作流程 1、把redis安装到Linux上 2、配置redis.conf文件 使之可以后台运行 3、根据项目需求添加相应的jar包 4、调用相应的api实现项目需求 二、redis相关知识 1、redis是缓存数据库&#xff0c;为了减少对关系型数据库的访问消耗&#xff0c;可以把常用的数据添加…

OPENCV-6 学习笔记

OPENCV-6 学习笔记 边缘检测 步骤&#xff1a; 滤波增强检测 canny算子—Canny 的目标是找到一个最优的边缘检测算法 评价标准&#xff1a; 1.低错误率: 标识出尽可能多的实际边缘&#xff0c;同时尽可能的减少噪声产生的误报。 2.高定位性: 标识出的边缘要与图像中的实…

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

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

匿名函数

匿名函数&#xff1a;lambda 函数 语法&#xff1a; lambda 参数1, 参数2 : 表达式 表达式即为返回值 例&#xff1a; result &#xff08;lambda x, y: xy)(1.2) print(result) 例2&#xff1a; newFunc lambda x,y : xy print(newFunc(1,2) 例3&#xff1a; result sorted…

hdu-6165(tarjan+topusort)

题意&#xff1a;一个有向图&#xff0c;无自环&#xff0c;无重边&#xff0c;让你判断这个图内的任意两点是否有路&#xff1b; 解题思路&#xff1a;首先&#xff0c;判断两个点是否可达一般用出入度来判断&#xff0c;如果在拓扑排序中同时有两个及以上入度同时为零的点&am…

OPENCV-7 学习笔记

OPENCV-7 学习笔记 转换图像尺寸 resize函数。这是最直接的方式&#xff0c;yrUp( )、pyrDown( )函数。即图像金字塔相关的两个函数&#xff0c;对图像进行向上采样&#xff0c;向下采样的操作。 图像金字塔 类似于金字塔的形状&#xff0c;将原始图像以金字塔形状的分辨率…

杂项: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…

php中的json

php中的json函数主要有三个&#xff1a; 函数描述json_encode()对变量进行 JSON 编码json_decode对 JSON 格式的字符串进行解码&#xff0c;转换为 PHP 变量json_last_error返回最后发生的错误 认识前提&#xff1a; {}&#xff0c;花括号代表包装的是一个对象数据&#xff0…

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…