第五章的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<double> time_used=chrono::duration_cast<chrono::duration<double>>(t2-t1);

需要包括头文件为:#include <chrono>

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

(2)#include<ctime>的计时函数

clock_t  time_stt=clock();

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

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

cout<<"此方法的运行时间为:"<<time<<"秒。"<<endl;

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

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

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

double time0=static_cast<double>(getTickCount());

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

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

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

5.复制图像的方式:

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

6. 图像像素遍历方式

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

 for ( size_t y=0; y<image.rows; y++ )//size_t是一种机器相关的无符号类型,它被设计的足够大以便能表示内存中任意对象的大小。{// 用cv::Mat::ptr获得图像的行指针unsigned char* row_ptr = image.ptr<unsigned char> ( y );  // row_ptr是第y行的头指针for ( size_t x=0; x<image.cols; x++ ){// 访问位于 x,y 处的像素unsigned char* data_ptr = &row_ptr[ x*image.channels() ]; //第x列乘上通道数。 data_ptr 指向待访问的第y行,3个通道的x列的像素数据// 输出该像素的每个通道,如果是灰度图就只有一个通道for ( int c = 0; c != image.channels(); c++ ){unsigned char data = data_ptr[c]; // data为I(x,y)第c个通道的值}}}

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

(2)at()函数

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

unchar value=image.at<uchar>(i,j)   //读取像素值

image.at<uchar>(i,j) =128   //对像素值进行赋值

参考链接:

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

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

  1. 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)

    视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版) 转载自大神 #include <iostream> #include <fstream> using na ...

  2. 《视觉SLAM十四讲》手写高斯牛顿—笔记记录

    <视觉SLAM十四讲>手写高斯牛顿-笔记记录 我们的最终目的:使用高斯牛顿法,拟合参数abc 我们的实际小目标:求解增量方程得到ΔX(有了Δx就可以不停的迭代Eabc使得拟合Rabc啦) ...

  3. 视觉SLAM十四讲ch5 stereo踩坑日记

    环境:ubuntu20.04 问题描述:在运行imageBasics 文件夹里面的程序时没有问题,但是在运行stereo 文件夹下面的程序时报错error: 'xxxxxx' was not decl ...

  4. 《视觉slam十四讲》ch5相机与图像学习笔记(3)——实践部分 RGB-D相机代码解释及相关函数介绍

    在这篇博客中,主要介绍<视觉SLAM十四讲>第五讲的实践部分--RGB-D代码详解.关于imageBasics的代码可见我另一篇博客: <视觉slam十四讲>ch5学习笔记(1 ...

  5. 半闲居士视觉SLAM十四讲笔记(2)初识 SLAM- part 2 linux CMake、Kdevelop

    本系列文章由 youngpan1101 出品,转载请注明出处. 文章链接: http://blog.csdn.net/youngpan1101/article/details/71085778 作者: ...

  6. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

  7. 编译《视觉SLAM十四讲》ch5里joinmap出现 ***/anaconda3/lib/libpng16.so.16:‘inflateValidate@ZLIB_1.2.9’未定义的引用

    编译<视觉SLAM十四讲>ch5里joinmap,make时出现//home/yjbing11/anaconda3/lib/libpng16.so.16:对'inflateValidate ...

  8. 《视觉SLAM十四讲》学习笔记:第5讲相机与图像

    <视觉SLAM十四讲>学习笔记:第5讲相机与图像 前言:本学习笔记将记录<视觉SLAM十四将>中一些重要的知识点,并对书中一些比较难的知识点添加上一些笔者个人的理解,以供笔者本 ...

  9. 视觉SLAM十四讲学习笔记-第五讲-相机模型

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  10. 视觉SLAM十四讲 第5讲 相机与图像

    视觉SLAM十四讲 第5讲 相机与图像 1. 关于针孔相机模型 2. 关于图像畸变 2.1 什么是畸变 2.2 畸变参数 2.3 关于双目相机模型 三维世界中的一个物体反射或发出的光线,穿过相机光心后 ...

最新文章

  1. pandas XLRDError Excel xlsx file; not supported 解决办法
  2. 浅谈java内存分配和回收策略
  3. python读取caffemodel文件
  4. python操作mysql_使用Python操作MySQL的一些基本方法
  5. mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
  6. lpc1768的gpio库函数_LPC1768之GPIO流水灯的实验例程
  7. C#初学的一些注意点
  8. 在eclipse中引入jquery.js文件报错的解决方案
  9. 用Python进行web开发需要学习什么?
  10. Chrome 渲染分析之 Rendering 工具使用
  11. android手机不开机刷机,手机无法开机怎么刷机?安卓手机救砖教程
  12. MSP与PGMP的关联性与区别
  13. 笔记软件,离线/本地化 or 云笔记?印象、思源笔记、notion、onenote、有道、Roamedit、专注笔记,我来,幕布、飞书、joplin、Obsidian、Logseq、语雀使用体会
  14. 开机后我的计算机打不开,电脑开机后图标打不开怎么办
  15. 宋宝华:slab在内核内存管理和用户态Memcached的双重存在
  16. android5.1内核版本,Msm8909+android5.1 user和eng版本对应的内核配置文件
  17. js 根据id 取出数组中对应的对象
  18. iOS compare用法
  19. 使用 Wireshark 进行计算机网络协议分析
  20. 使用overlap-add方法计算两个信号的卷积示例

热门文章

  1. GTSAM 官方教程学习
  2. 果园机器人能干什么_24* 果园机器人第二课时教学实录
  3. knime3命令行执行方式
  4. 用IP打开共享文件,提示文件共享不安全,需要过时的SMB1协议,你的系统需要SMB2或者更高的的版本
  5. jquery 循环执行ajax
  6. [127]正则表达式匹配身份证 电话号码 邮箱 住宅电话 邮编等
  7. python四种常用高阶函数
  8. 红外小目标:基于深度学习的红外小目标检测研究方法(持续更新中)
  9. ERROR RC.EXE 已退出(退出代码01)解决方法
  10. 用C/C++读取一个文件,写一个输入法