开发工具:
文件大小: 4mb
下载次数: 0
上传时间: 2019-08-17
详细说明:
上传自己学习opencv时寻找的opencv3的学习笔记,里面的内容很不错,与大家一起分享typedef vcc Vcc31
typedef vcc Vcc 4
typedef Vcc Voc2f
Typedef vec Vec3f
typedef Veckfloat, 4> Vec4r
typedef Vec Vec6f
typedef Vec Vec2d
typedef Vec'double, 3> Vec3d
typedef Vec Vec4d
typedef Vec Vecbd
分区第一章-基本操作的第3页
像素遍历
2017年3月25日13:06
1使用矩阵变量的at()方法来实现对一个像素点数据的读
取和赋值
uchar value= grayly.at< uchar>(i,j);//读岀第i行第j列像素值
gray Im.at< uchar>(i,j)=128;/将第i行第j列像素值设置为128
2利用at()方法实现图片像素的遍历
finc lude iostream>
#include"opencv2/opencv hpp
using name space std
using name space cv
int main (int argc, char* argv[
Mat grayim( 600, 800, CV SUC1)
Mat colorim(600, 800, CV 8UC3)
//遍历所有像素,并设置像素值
for( in
grayim, rows
for( int j=0; j< grayim cols; ++j)
grayim. at(uchar>(i, j)=(1+j)%255
//遍历所有像素,并设置像素值
for( int i=0: i< colorim rows;++i
for( int j=0;j< colorim cols; ++j)
3b pixel
pixel[o]=1%255;//Blue
pixel[l]=j%255;//Green
pixel[2]=0;//Red
colorim.at(Vec3b>(i, j)=pixel
//显示结果
Imshow( grayim, gray lm
imshow( colorim", colorim
waitRo(o)
rcturn o
3一个简单的二值化处理代码
Mat P= imread( dog. jpg
imshow( 2, p)
(int i=0:i(P
for (int j=0;j< p cols: ++j)
Vec3b value=P at(Vec3 b>(i, j)
for (int h=0;h< 3: h++)
分区第一章-基本操作的第4页
f (valuckh>128)
value h=255
else
value[h= 0
P at(Vec3b>(i, j)=value
imshow(1,p)
waitKey(20170322)
4使用迭代器遍历矩阵
finc lude iostream>
#include opencv2/opencv hpp
using name space std
using namespace cv
int. ma
ain (int argc, char* argv [l
Mat gravim(600, 800, CV 8UC1)
Mat colorim(600, 800, CV 8UC3)
/遍历所有像素,并设置像素值
MatIterator grayit, grayed
for( gravit= grayim begino, grayed
grayim endO: grayit grayed; ++grayit)
* gravit= rando‰255
//遍历所有像素,并设置像素值
MatIterator colorit. colorend
for( colorit= colorim beginO, colored
colorim endO: colorit ! colored; ++colorit)
(colorit)[o]= rand(%255;//Blue
(colorit)[l= rand(%255://Green
(colorit)[2= rand(2%255;//Red
//显示结果
imshow(grayim", gray im
imshow( colorim
witkEy(o)
rcturn o
5使用指针来遍历
tinc lude iostream
#inc" opencv2/opencv hpp
using namespace std
分区第一章-基本操作的第5页
using namc spacc Cv
int main (int argc, char* argy L])
Mat grayim(600, 800, CV 8UC1)
Mat colorim(600, 800, CV 8UC3
//遍历所有像素,并设置像素值
for( int i=0; i< gray im rows: ++i)
//取第i行首像素指针
uchar k p= grayim ptr(i)
//对第i行的每个像素(byte)操作
for( int j=0; j< grayim cols; ++j)
p[Jj]=(i+j)%255
/遍历所有像素,并设置像素值
for( int i=0; i< colorim rows: ++1)
//获取第i行首像素指针
3b* p- colorim ptr(i)
for( int j=0; j< colorim cols:++j)
p[i][0]=i%255;//Blue
p[j[1]=1%255;/ Green
p[j[2]=0;/Red
//显示结果
imshow(colorim- &7
1mshow( grayim
ay lm
colorim)
witkEy(o)
return o
分区第一章-基本操作的第6页
选中图像局部区域
2017年3月25日19:27
1选中图像局部区城
注意,Mat类提供了很多选择局部区域的方法,但是它们
都是指向同一片数据区的,因此就算把局部区域赋值给新
的Mat对象,其实还是指向同一个数据区。
2单行、单列、对角线选中
提取矩阵的一·行或者一·列可以使用函数row()或col。函数的声明如
Mat Mat:: row (int i) const
Mat Mat:: col(int j)const
参数ⅰ和j分别是行标和列标。例如取出A矩阵的第i行可以使用如
下代码:
Mat line=A row(i)
例如取出A矩阵的第i行,将这一行的所有元素都乘以2,然后赋值给
第j,可以这样写:
A row(i=A row(i)*2
取对角线则
MatMat: diag (int d)const
参数d=0时,表示取主对角线;当参数d>0是,表示取主对角线下方的次对角线,
如d1时,表示取主对角线下方,且紧贴主多角线的元素;当参数d0时,表示取
主对角线上方的次对角线。
A diag(d)
3多行、多列选中
用 range( start;end)方法,注意包含star但不包含end
//创建一个单位阵
Mat A= Mat:: eye(10, 10, CV 32S)
//提取第1到3列(不包括3)
Mat B= A(Range:: all(, Range(1, 3))
//提取B的第5至9行(不包括9)
//其实等价于C=A( Range(5,9), Range(l,3)
Mat C=B(Range(5, 9), Range:: all()
a()表示所有行或者列
分区第一章-基本操作的第7页
4提取已知对象的感兴趣的区域
(1)可以利用上面多行多列选中的方式
Mat roi= img(Range(10, 100), Range(10, 100))
//使用构造函数
(2)也可以使用roi方法
//创建宽度为320,高度为240的3通道图像
Mat img(Size(320, 240), CV 8LC3)
//roi是表示img中Rect(10,10,100,100)区域的对象
Mat roi (img, Rect(10, 10, 100, 100))
Mat roi(img, Range(10, 100), Range(10, 100))
(3)使用括号运算符
Mat roi2- img(Rcct(10, 10, 100, 100))
分区第一章-基本操作的第8页
Mat表达式
2017年4月11日
1:59
1什么是MAT表达式
其实MAT就是定义了一个矩阵类型的对象
那么当然可以进行矩阵相关的各类运算
下面给出Mat表达式所支持的运算。下面的列表中使用A和B表示Mat类型的对
象,使用s表示 Scalar对象, alpha表示 double值
●加法,减法,取负:A+B,A-B,A+s,A-s,s+A,s-A,-A
●缩放取值范围:A* alpha
●矩阵对应元素的乘法和除法:A.mul(B),A/B, alpha/A
●矩阵乘法:A*B(注意此处是矩阵乘法,而不是矩阵对应元素相乘)
矩阵转置:A.tO
●矩阵求逆和求伪逆:A.inⅴ(
矩阵比较运算: A cmpp B, A cmpp alpha, alpha cmpp a。此处 cpop可以
是>,>=,三,!=,<=,<。如果条件成立,则结果矩阼(8U类型矩阼)的对应
元素被置为255;否则置0
●矩阵位逻辑运算: a logico b, a logico s, s logico a,A,此处
logico可以是&,|和^。
●矩阵对应元素的最大值和最小值:min(A,B),min(A, alpha),max(A,B)
max(A, alpha)。
●矩阵中元素的绝对值:abs(A)
●叉积和点积:A. cross(B),A.dot(B)
2例程
#include iostream>
#inc lude"opencv 2/opencv hpp
using namespace std
using name space Cv
int main(int argc, char* argv[l
Mat A= Mat:: eye(4, 4, CV 32SC1)
Mat b=a sk 3+l
Mat C=B diag(0)+B col(1)
cout <(来访问矩阵元素了
直接使用M(j)来访问元素
MatM(600,800,CV8UC1);
for( int i=0: i< M rows: ++1)
//获取指针时需要指定类型
uchar p=M ptr(i)
for( int j=0; j< M cols: ++j)
double dl=(double)((i+j)%255)
//用atO读写像素时,需要指定类型
M at()
//但编译时不会提醒错误
//运行结果不正确,d2不等于d1
double d2=M at(i, j)
对比如下
//在变量声明时指定矩阵元素类型
Mat &) M
for( int i =0; i< MI rows; ++i)
//不需指定元素类型,语句简洁
uchar p=MI ptr(i)
for( int j=0; j< M1 cols; ++j
double d1=(double)((i+j)%255)
/直接使用 Matlab风格的矩阵元素读写,简沾
M1(i,j)=d1;
doublc d2=M1 (i, j)
分区第一章-基本操作的第10页
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.