第五章的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. LCD显示原理和驱动方式介绍
  2. about osgeo中国
  3. 【渝粤题库】广东开放大学 社交礼仪 形成性考核
  4. Java语言程序设计(基础篇) 第十一章 继承和多态
  5. PHPCMS2008调用Uchome系统[空间之星]GET语句
  6. IIC加载以及存在的问题---lattice XO3
  7. 小学计算机课的微案例,小学信息技术教学案例分析
  8. python新浪微博爬虫_scrapy实现新浪微博爬虫
  9. 邮件营销如何“爆增”潜在客户?
  10. 防御windows系统激活工具的后门入侵
  11. 2017江苏高职计算机分数线,2017年江苏高考分数线公布
  12. 数据分析训练营-pandas
  13. HTML css实现翻页效果,一个纯CSS3实现的酷炫翻书效果
  14. H3C无线AC+AP配置4——Wifi名称相同,但不同楼不同vlan
  15. Windows程序意外挂掉,但显存依然被占用
  16. 09-Hadoop编程
  17. SQLMAP进阶:参数讲解
  18. k-means算法及改进
  19. C语言源代码系列-管理系统之会员计费系统
  20. 深入理解计算机视觉中的损失函数

热门文章

  1. 2023年全国职业院校技能大赛 网络系统管理国赛规程 正式版!
  2. C#连接Access数据库,Update更新数据时出现“不能打开数据库,应用程序可能无法识别该数据库。。。”错误
  3. 【SLAM】SLAM环境配置 Win10+VS2019+OpenCV+PCL+g2o+Vcpkg
  4. 数据库 事务级别介绍
  5. autocad常用的快捷键
  6. SMB 2.0和3.0协议 Java应用
  7. JVM原理系列--双亲委派模型
  8. 高通 Android 12/13 默认修改中文语言设置
  9. SpringMVC ajax传值问题
  10. i7 12700k和i7 12700kf的区别 i712700k和i712700kf的差距大吗