OPENCV-1 学习笔记

灰度图:2维矩阵

彩色图:3维矩阵

ps:目前大部分设备都是用无符号 8 位整数(类型为 CV_8U)表示像素亮度

Mat类定义:

class CV_EXPORTS Mat
{
public://一系列函数.../* flag 参数中包含许多关于矩阵的信息,如:-Mat 的标识-数据是否连续-深度-通道数目*/int flags;//矩阵的维数,取值应该大于或等于 2int dims;//矩阵的行数和列数,如果矩阵超过 2 维,这两个变量的值都为-1int rows, cols;//指向数据的指针uchar* data;//指向引用计数的指针//如果数据是由用户分配的,则为 NULLint* refcount;//其他成员变量和成员函数...
};

单通道图像:元素类型一般为 8U(即 8 位无符号整数),也可以是 16S、32F 等;这些类型可以直接用 uchar、short、float 等 C/C++语言中的基本数据类型表达

多通道图像:如RGB彩色图像,需要用三个通道来表示。在这种情况
下,如果依然将图像视作一个二维矩阵,那么矩阵的元素不再是基本的数据类型。可以采用Vec类,表示一个向量。如8U类型的RGB彩色图像使用Vec3b。

对于 Vec 对象,可以使用[]符号如操作数组般读写其元素,如:

Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0]=255; //B 分量
color[1]=0; //G 分量
color[2]=0; //R 分量

at()函数:实现读取矩阵中的某个像素,或者对某个像素进行赋值操作。

uchar value = grayim.at<uchar>(i,j);//读出第 i 行第 j 列像素值
grayim.at<uchar>(i,j)=128; //将第 i 行第 j 列像素值设置为 128

对图像进行遍历,分别对单通道的 grayim 以及 3 个通道的 colorim,然后对两个图像的所有像素值
进行赋值,最后现实结果

Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素,并设置像素值for( int i = 0; i < grayim.rows; ++i)for( int j = 0; j < grayim.cols; ++j )grayim.at<uchar>(i,j) = (i+j)%255;//遍历所有像素,并设置像素值for( int i = 0; i < colorim.rows; ++i)for( int j = 0; j < colorim.cols; ++j ){Vec3b pixel;pixel[0] = i%255; //Bluepixel[1] = j%255; //Greenpixel[2] = 0; //Redcolorim.at<Vec3b>(i,j) = pixel;}//显示结果imshow("grayim", grayim);imshow("colorim", colorim);waitKey(0);

使用迭代器遍历:

Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素,并设置像素值MatIterator_<uchar> grayit, grayend;for( grayit = grayim.begin<uchar>(), grayend =
grayim.end<uchar>(); grayit != grayend; ++grayit)*grayit = rand()%255;//遍历所有像素,并设置像素值MatIterator_<Vec3b> colorit, colorend;for( colorit = colorim.begin<Vec3b>(), colorend =
colorim.end<Vec3b>(); colorit != colorend; ++colorit){(*colorit)[0] = rand()%255; //Blue(*colorit)[1] = rand()%255; //Green(*colorit)[2] = rand()%255; //Red}//显示结果

采用指针:

Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素,并设置像素值for( int i = 0; i < grayim.rows; ++i){//获取第 i 行首像素指针uchar * p = grayim.ptr<uchar>(i);//对第 i 行的每个像素(byte)操作for( int j = 0; j < grayim.cols; ++j )p[j] = (i+j)%255;}//遍历所有像素,并设置像素值for( int i = 0; i < colorim.rows; ++i){//获取第 i 行首像素指针Vec3b * p = colorim.ptr<Vec3b>(i);for( int j = 0; j < colorim.cols; ++j ){p[j][0] = i%255; //Bluep[j][1] = j%255; //Greenp[j][2] = 0; //Red}}//显示结果

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

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

相关文章

javascript --- repeat的用处

描述 思路: 最多重复s.length次使用String.prototype.repeat(n)方法可以将字符串重复n次 核心: while( i < len/2){if( s s.slice(0,i).repeat(len /i) ) {return ture;} }总体代码: var repeatedSubstringPattern function(s) {let i 1;let len s.length;while (i …

redis 零散知识

1、单线程 2、默认 16 个库。0~15 3、select &#xff1a;切换数据库 4、DBsize &#xff1a;查看当前数据库的数量 5、keys * &#xff1a;查看当前库的所有 key 6、keys k? &#xff1a;问号是占位符 7、FlushDB &#xff1a;清除当前库 8、FlushAll &#xff1a;清除所有库…

模型评估——定量分析预测的质量

https://blog.csdn.net/hustqb/article/details/77922031 评分参数定义模型评价规则 公共案例预定义值根据度量函数定义你的评分策略应用你自己的评分对象使用多种度量指标分类度量 从二分类到多分类多标签精确度Cohens kappa混乱矩阵分类报告汉明损失Jaccard 相似性相关系数准…

OPENCV-2 学习笔记

1、图像显示 #include<opencv2/opencv.hpp> using namespace cv; //使用命名空间 void main(){Mat srcImage imread(1.jpg);//载入图像imshow(图像标题,srcImage);//显示图像waitKey(0);//等待按键按下 } 2、图像腐蚀 #include <opencv2/opencv.hpp> #incl…

javascript --- 对象的方式体验链式调用

将功能相近的方法写入同一个对象中,是一个很好的编程习惯,便于后期的维护和前期的开发. foo1 var fooObj {foo1: function() {console.log(foo1);return this;} } fooObj.foo1();此有一个对象: fooObj它有一个方法: foo1()foo1打印了一个字符串’foo1’,然后返回了当前的执行…

oracle 数据库查询多条数据的一列值

select sum(case when hc13 then JE else 0 end), sum(case when hc14 then JE else 0 end), sum(case when hc15 then JE else 0 end), sum(case when hc16 then JE else 0 end) from 表名转载于:https://www.cnblogs.com/lkzp123456/p/8608080.html

OPENCV-3 学习笔记

OPENCV-3 学习笔记 imread()读入图&#xff0c;第一个参数&#xff0c;const string&类型的filename&#xff0c;填我们需要载入的图片路径名&#xff0c; 第二个参数&#xff0c;int类型的flags&#xff0c;为载入标识&#xff0c;它指定一个加载图像的颜色类型。 named…

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…