Opencv学习笔记(c++)——基本常用函数及一些图像处理基本方法

首先感谢@浅墨_毛星云,本篇博文是小武通过学习@浅墨_毛星云的博客以及书籍《opencv3.0编程入门》整理的笔记及疑问心得,小武水平有限,欢迎交流。

@浅墨_毛星云博文:https://blog.csdn.net/poem_qianmo/article/category/1923021



一、常用函数

1、点的表示:Point 类;

2、颜色的表示:Scalar类:

Scalar( a, b, c )

我们将定义一个基准色如: Blue = aGreen = b and Red = c

3、尺寸的表示:Size类;

4、矩形的表示:Rect类;

5、颜色空间转换:cvtColor()函数;

6、指定一个序列中的连续子序列:Range类,Range::all() 表示全部序列,Range(a,b);

7、批量进行元素查找,扫描和操作图像:LUT();

8、计时函数:getTickcount()和getTickFrequency;

9、分离色彩通道:split ();   合并色彩通道:merge()。


二、访问图像中像素的三种方法

1、指针(高效):返回图像任一行的首地址:ptr类(是一个模板类)。如:Image.ptr<uchar>(i),读取第i行首地址;

uchar* data=Image.ptr<uchar>(i)

data[j] 则为第i行第j列的元素;

2、迭代器(interator)(不会出现越界):                  

Mat_<Vec3b>::interator img_begain=Img.begin<Vec3b>();//获取开始位置
Mat_<Vec3b>::interator img_end=Img.end<Vec3b>();//获取终止位置

for(;Img.begin!=Img.end;++Img.begin)
{
//处理每个像素
(*Img.begin)[0]=(*Img.begin)[0]/div*div+div/2;蓝
(*Img.begin)[1]=(*Img.begin)[1]/div*div+div/2;绿
(*Img.begin)[2]=(*Img.begin)[2]/div*div+div/2;红
}

3、动态地址计算(耗时,直观简单):at

IMG.at<uchar>(i,j)=val,表示单通道,第i行第j列元素;IMG.at<Vec3b>(i,j)[channel]=val,表示多通道(channel:0表示蓝,1表示绿,2表示红),第i行第j列元素。


三、ROI(感兴趣区域)

如:Mat imageROI=Source_Img(Rect(left_up_x,left_up_y,Logo_img.cols,Logo_img.rows));

left_up_x,left_up_y表示矩形左上角开始元素的坐标。






阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页