《视觉slam十四讲》ch5相机与图像学习笔记(1)—— 实践部分imageBasics代码讲解

    第五章的ch5/imageBasics例程相对来说比较简单,代码内容包括读取图像文件,输出图像信息,遍历图像,图像的直接复制以及利用clon函数复制等。介绍一下其中的干货。

目录

1.关于int main(int argc,char** argv)中argc,argv参数的解释

2.关于 cv::waitKey(0)的解释:

3.图像类型

4.计时方式

5.复制图像的方式:

6. 图像像素遍历方式


1.关于int main(int argc,char** argv)中argc,argv参数的解释

    argc参数表示命令行中参数的个数,其值是在输入命令时由系统按实际参数的个数自动赋值的。
 argv参数是字符串指针数组,存放命令行中的参数,长度即为参数个数argc,其中的第0个参数是程序的全名,之后的参数由用户输入的参数确定。在这个项目中,在终端命令行中输入了代码:

./imageBasics ../ubuntu.png

因此,argc为2,而argv[0]为imageBasics文件,argv[1]为图片ubuntu.png。

2.关于 cv::waitKey(0)的解释:

 在显示图像inshow()之后必须要有waitKey(k),以便给予足够的时间显示图像,功能是不断刷新图像。waitKey(k)仅对窗口机制起作用,其中k的单位为ms:如果k=0,表示无限等待下去,直到有按键按下,无返回值;如果k>0,表示等待的时间,若在这段时间内没有任何操作则等待结束后返回-1,如在期间输入了字符,则最终返回字符的ASCII码。

3.图像类型

   例如: CV_8UC1 、 CV_8UC2 、 CV_8UC3等

图像类型表达式的结构为:CV_<比特数> <数据类型>C<通道数>

其中比特数(bit_depth)——表示图像中每个像素点在内存空间中所占大小,有8bite,16bites,32bites,64bites。

数据类型包括S、U、F

S--代表—signed int——有符号整形
U–代表–unsigned int——无符号整形
F–代表–float——单精度浮点型

通道数:看有几种颜色类型,像RGB图像通道为3,灰度图为1,RGB-A代表有透明的RGB图像,通道数为4。

4.计时方式

    (1)代码中采用的计时方式为:在需要计时的程序前后得到时间,然后相减。

chrono::steady_clock::time_point t1=chrono::steady_clock::now();

    >>>>>程序代码>>>>>>>

 chrono::steady_clock::time_point  t2=chrono::steady_clock::now();
  chrono::duration time_used=chrono::duration_cast>(t2-t1);

需要包括头文件为:#include

除此之外还有以下计时方式:

(2)#include的计时函数

  clock_t  time_stt=clock();

  >>>>>程序代码>>>>>>>

  double time=(clock()-time_stt)/(double)CLOCK_PER_SEC

  cout<<"此方法的运行时间为:"<

(3)利用OpenCV core.hpp文件下的getTickCount()和getTickFrequency() 

           getTickCount()函数返回CPU自某个事件以来走过的时钟周期数;

           getTickFrequency()函数返回CPU一秒中走过的时钟周期数;

       double time0=static_cast(getTickCount());

        >>>>>>>>>>>>程序代码>>>>>>>>>>>>>>>>>>>

       time0=((double)getTickCount()-time0)/getTickFrequency();

参考链接:openCV 小结4——论计时函数_朝闻雨的博客-CSDN博客

5.复制图像的方式:

    (1)直接赋值:在这种方式下的赋值,一旦对复制后的图像进行更改,则原图像也会改变;
    (2)使用clone函数赋值:对复制后的图像更改不会影响到原图像;

6. 图像像素遍历方式

(1)代码中采用的遍历方式是采用ptr指针。

 for ( size_t y=0; y ( y );  // row_ptr是第y行的头指针
        for ( size_t x=0; x

其他两种为:使用at动态地址计算方式和采用iterator迭代器方式。

(2)at()函数

可以利用at函数读取图像中指定像素的值,也可进行赋值操作,如下两个代码所示:

unchar value=image.at(i,j)   //读取像素值
image.at(i,j) =128   //对像素值进行赋值

参考链接:

)opencv学习(四)之像素遍历三种方式_梧桐栖鸦的博客-CSDN博客_opencv遍历像素 (

你可能感兴趣的:(ubuntu,c++,slam,c语言,ubuntu,计算机视觉,opencv)