OPENCV3编程入门------core组件(第五章)

core组件(第五章)

访问图像中的像素

 

图像在内存中的存储方式:我们可以通过isContinuous()函数来查询图像是否在内存中连续

颜色空间的缩减

0~9取值为0 以此类推,原来0~255一共256个值变成26个值。小技巧:因为每次进行取余操作很浪费时间,而且值是固定的值,所以我们可以用一个数组tabel [256]去存储 0~256对应的值,即公式P[ i ] = tabel [  P[ i ]  ] 

LUT 函数 : void LUT(InputArray src, InputArray lut, OutputArray dst);

第一个参数:输入图像

第二个参数:查找表(如果输入单通道我们必须是单通道的表,如果是三通道那么可以是单通道表或者三通道表:(单通道)对于BGR都是应用这张表 (三通道)分别运用)

首先我们需要创建一个查找表,这里查找表需要自己创建(分单通道与三通道)

网上有两种写法:

第一种:

Mat LookUpTable(1,256,CV_8UC1)

uchar* p=LookUpTable.data(这里是得到图像存储的地址)

for(int i=0;i<256;i++){

  p[i]=tabel[i];

}

LUT(Input,LookUpTable,Output);

第二种:

uchar lutData[256];

for(int i=0;i<256;i++){

  lutData[ i ] = tabel[ i ] ;

}

Mat LookUpTable(1,256,CV_8UC1,lutData);//这里需要就相当于给Mat类进行赋值

LUT(Input,LookUpTable,Output);

总之不管是哪一种写法最后输入的都是Mat 类型的,三通道的与单通道的类似,对其进行一一赋值。

https://blog.csdn.net/y363703390/article/details/79431450 这里附上一个更加详细的介绍

计时函数

getTickount( )用来记录某个时间响应起来走过的时间周期数

getTickFrequency( )用来得到CPU一秒内走过的时间周期数

那么很显然 time = getTickcount( ) / getTickFrequency( ) 注意转换到double 类型

访问图像像素的三种方法

1.指针访问:  C操作符[ ]  最高效

unchar* data=Output.ptr<uchar>(i)获取每一行的首地址

2.用迭代器操作像素

Mat<Vec3b>::iterator it =OutputImag.begin<Vec3b>();

Mat<Vec3b>::iterator itend=OutputImage.end<Vec3b>();

for(;i != itend;++i){

(*it)[0]代表第一个元素,(*it)[1]代表第二个元素,(*it)[2]代表第三个元素

}

3.动态地址

Output.at<Vec3b>( i,j )[ 0 ]代表着在第i行第j个的像素点,因为是Vec3b所以可以[ ]进行查找

 ROI区域图像叠加与图像混合

 

Mat Output=imread("i.jpg")

两种方法来定义ROI区域

Mat ROI =Output( Rect(int x, int y ,int width,int height));

Mat ROI=Output(Rang(row_start , row_end) , Range(col_start , col_end ));

将图像加到指定的区域

1.copyTo()

假设读取了一个Logo,然后将这个logo加载到指定的区域

Logo.copyTo(ROI , mask);mask是掩膜的作用。掩膜的作用简单讲就是一个灰色图像,如果不感兴趣的区域像素设置0 ,感兴趣的区域像素设置非0

https://www.cnblogs.com/skyfsm/p/6894685.html  这个博主写的更加详细。

2.addWeighted

addWeighted( image1 , a1  ,image2 , a2 , b , dstImage , depth)  dstImage= image* a1+ image *a2+b; 然后depth 是关于图像的深度设置,默认为-1 ,即两个图像的的深度相同3.

3.split()与merge(): 通道分离与合并,比较简单

图像对比度与亮度调节:

依据 g(i,j)=a*f(i,j)+b, a用来调节对比度,b用来调节亮度,具体的操作就是对图像中每个像素进行操作。

 

离散傅里叶变换

这一页特别的神奇,需要详细的了解时域与频域的变换,还有要对傅里叶变换有一定的了解。本人现在也只是一个模糊的解释,那个时候是看了两位大神的博客才懂得图像的傅里叶变换是什么意思

https://zhuanlan.zhihu.com/p/19763358 这个是讲傅里叶变换的,特别生动详细

https://blog.csdn.net/Replus_/article/details/81945495这个是讲图像的傅里叶变换的。

 

posted @ 2020-02-16 10:58  一个wxb  阅读(164)  评论(0)    收藏  举报