一、What is vector?

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.
用法:
1.文件包含:     
           首先在程序开头处加上#include<vector>以包含所需要的类文件vector,还有一定要加上using namespace std;

2.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除。

比如Vec<uchar, 3>:
其实这句就是定义一个uchar类型的数组,长度为3而已,例如 8U 类型的 RGB 彩色图像可以使用 <Vec3b>,3 通道 float 类型的矩阵可以使用 <Vec3f>。对于 Vec 对象,可以使用[]符号如操作数组般读写其元素,如:Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0]=255; //0通道的B 分量
color[1]=0; //1通道的G 分量
color[2]=0; //2通道的R 分量

二、How do we use it ?

vv

先扩展一下访问像素的 .at 的用法:

cv::mat的成员函数: .at(int y, int x)可以用来存取图像中对应坐标为(x,y)的元素坐标。但是在使用它时要注意,在编译期必须要已知图像的数据类型,这是因为cv::mat可以存放任意数据类型的元素。因此at方法的实现是用模板函数来实现的。假设提前已知一幅图像img的数据类型为 unsigned char型灰度图(单通道),要对坐标为(14,25)的像素重新赋值为25,则对应操作如下:

srcImage.at<uchar>(14,25) = 25;

如果要操作的图片img是一幅数据类型同样为unsigned char的彩色图片,再次要求将坐标(14,25)的像素赋值为25。这个操作跟上面的就有点区别了,需要对这个像素三个通道的每个对应元素赋值,Opencv中图像三原色在内存中的排列顺序为B-G-R(见下面注释),操作过程如下:

img.at<Vec3b>(14,25) [0]= 25;//B
img.at< Vec3b >(14,25) [1]= 25;//G
img.at< Vec3b >(14,25 [2]= 25;//R  

一个简单小程序:

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{Mat m(3, 3, CV_8UC3);//建立一个三行三列3通道像素Vec3b p;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){p[0] = i;p[1] = j;p[2] = i+j;m.at<Vec3b>(i,j) = p;}}cout <<"数组:"<<endl<<"M= " << m << endl;int a = m.at<Vec3b>(2, 2)[2];Vec3b b = m.at<Vec3b>(2, 2)[2];cout << "访问一个数:" << a <<endl<<"访问三通道:"<<b<<endl;waitKey(0);return 0;
}

结果:

下面是网上的一个程序(在图片上实现椒盐噪声),椒盐噪声是一种特殊的噪点,是随机的将图像的部分像素设置为黑色或白色(其实我理解是把椒盐噪声点随机设置颜色)。经修改如下:

#include<opencv2/opencv.hpp>
#include<iostream>
#include<cstdlib>
#include<vector>
using namespace std;
using namespace cv;#define WINDOW_1 "椒盐噪声点1"
#define WINDOW_2 "椒盐噪声点2"
void salt(Mat&, int);
int main()
{Mat srcImage = imread("D://vvoo//lena.jpg");Mat grayImage;cvtColor(srcImage, grayImage/*, CV_8UC1*/, CV_RGB2GRAY);imshow("原图", srcImage);namedWindow(WINDOW_1, WINDOW_AUTOSIZE);Mat g_dstImage = grayImage.clone();Mat dstImage = srcImage.clone();salt(g_dstImage, 3000);salt(dstImage, 3000);imshow(WINDOW_1, g_dstImage);imshow(WINDOW_2, dstImage);waitKey(0);return 0;
}
void salt(Mat&dst, int Saltnum)
{int x,y;for (int i = 0;i < Saltnum; i++){x = rand() % dst.cols;//保证x和y都在src的行数和列数范围内y = rand() %dst.rows;if (dst.channels() == 1){dst.at<uchar>(y, x) = 0;}if (dst.channels() ==3){dst.at<Vec3b>(y, x)[0] = 0;dst.at<Vec3b>(y, x)[1] = 0;dst.at<Vec3b>(y, x)[2] = 0;}}}

结果:

三、references

1.http://blog.csdn.net/liukun321/article/details/38402601

2.http://blog.csdn.net/wenhao_ir/article/details/50946638

Opencv之Vec3b是什么东东相关推荐

  1. 有趣的灵魂--我曾花时间玩过、学过的东东(技术篇)

    各位朋友可以随时私信我,一起讨论我下面涉及的内容,如果我能帮你解决一点点我曾经遇到的问题,非常荣幸! (有些东西不值得没必要写成博客,但是又希望和大家一起进步,所以只是写了我涉及到的方向,具体内容暂不 ...

  2. VSCode 安装 Go 插件、gopls 是个什么东东

    原文地址: VSCode 开发 Go 程序也可以和 GoLand 一样强大 VSCode 建议你启用 gopls,它到底是个什么东东?

  3. 为什么会有jsessionid,这个东东有什么用呢?

    2019独角兽企业重金招聘Python工程师标准>>> 为什么会有jsessionid,这个东东有什么用呢? 博客分类: java 为什么会有jsessionid,这个东东有什么用呢 ...

  4. 网管必看的好东东(一)

    自动释放系统资源 在Windows中每运行一个程序,系统资源就会减少.有的程序会消耗大量的系统资源,即使把程序关闭,在内存中还是有一些没用的DLL文件在运行,这样就使得系统的运行速度下降.不过我们可以 ...

  5. 一个超牛的东东:专门删除牛皮文件和文件夹

    一个超牛的东东:专门删除牛皮文件和文件夹 电脑中有一些不知为何删除不掉的文件和文件夹,无论用什么超级粉碎机都无法清除. 在网上看到的一个方法可以帮忙 注意:使用时请小心, 建立非常简单: 新建文本文档 ...

  6. 【任务脚本】更新京东任务东东农场脚本,京东种水果脚本,京东活动任务半自动程序...

    最近看到大牛更新了东东农场的脚本,东东农场就是京东种水果的日常任务,可以搜索"东东农场"进入(亲测猕猴桃挺好吃的),测试体验了一下脚本,有些不稳定,不过可以用,只是可能需要多运行两 ...

  7. 转发高人文章:以前写的一些有关代码签名/时间戳数字证书的东东

    此文摘自:http://bbs.wosign.com/forum.php?mod=viewthread&tid=86 以前苦于没有专门的平台和数字证书方面的专家.爱好者一起交流,写的一些有关代 ...

  8. JavaScript怎么安装_几句话说清楚JavaScript、V8引擎、NodeJS、NMP,到底是什么东东...

    小程序开发如火如荼,如果你是程序员,你还不懂小程序的开发,恐怕会被同行认为太LOW了吧!不过,新入行小程序开发者确实会被新的名词搞得一头雾水. 比如JavaScript不是在浏览器端运行吗,怎么还可以 ...

  9. php生成excel教程,php生成EXCEL的东东

    php生成EXCEL的东东 发布时间:2016-06-17 来源: 点击: 次 可以通过PHP来产生EXCEL档.  teaman翻译 ---------------------------- Exc ...

  10. 一个祸害我很久的东东——事件过滤器之按键触发

    一个祸害我很久的东东--事件过滤器之按键触发 下面这个东东其实很常见,也很实用,平时上网的时候对之经常见,以为很简单,当然弄懂后,其实发现,他确实蛮简单的,但就是这小东西害了我好久好久啊.... 就是 ...

最新文章

  1. 射极跟随器实验报告数据处理_射极跟随器实验报告模式
  2. keras构建卷积神经网络(CNN(Convolutional Neural Networks))进行图像分类模型构建和学习
  3. PTAM增强现实相关
  4. 机器学习笔记(二)逻辑回归和正则化
  5. mysql 自动补齐 表名,列名 方法, 重启mysql方法
  6. DTD -- XML验证
  7. CSP2021提高组复赛解析
  8. 用C++实现网络编程---抓取网络数据包的实现方法
  9. Windows7修改hosts提示:您没有权限在此位置中保存文件
  10. php 把查询数据转json格式,php将从数据库查询到的数据转化为json格式,并写入json文件中...
  11. bgsave配置与工作流程
  12. 爬取B站程序猿up主,分析程序猿up出什么类型的视频会受欢迎
  13. win10易升工具使用教程,win10易升如何使用
  14. ITIL规范(持续更新)
  15. VTK学习笔记(二十八)ExtractEnclosedPoints python示例
  16. sklearn.metrics.confusion_matrix
  17. 华为计算机的隐藏应用程序,华为平板5怎么隐藏软件 荣耀5平板怎么隐藏应用程序?...
  18. 机器视觉halcon——距离测量
  19. 无线投影服务器连接投影仪,投影仪如何实现无线连接投影?
  20. java批量生成pdf

热门文章

  1. 福禄克Fluke-190-504 ScopeMeter 彩色数字示波表F190-504S
  2. deepin自带wine使用方法_图解deepin操作系统安装,体验定制版的国产操作系统
  3. Corel Painter 12安装与激活全过程
  4. centos7 日志定期清理及修改系统日志保留时间
  5. Python从入门到精通,100天就够了!(1)——Python初体验
  6. Nutz | Nutz项目整合Spring实战
  7. [java] BlueJ 里显示 ERROR:找不到符号
  8. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
  9. 人类宇宙三定律:热力学第二定律、进化论、脱水
  10. codecombat计算机科学三,Codecombat 游戏攻略——JavaScript编辑语言——关卡(计算机科学三)Ⅱ...