关于mat函数

看不懂系列:不过感觉好像挺全的,就粘过来了
https://blog.csdn.net/listener51/article/details/46117601#t0 (全)
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/mat - the basic image container/mat - the basic image container.html
https://blog.csdn.net/guyuealian/article/details/70159660
https://blog.csdn.net/giantchen547792075/article/details/9107877
https://www.cnblogs.com/justkong/p/7278579.html
超级有用:对于小白的我来说让我看懂了程序里的话就是有用的!

  • https://blog.csdn.net/u012655441/article/details/69258719
    Mat image(240, 320, CV8UC3);
    第一个参数是rows,该矩阵的行数;第二个参数是cols,该矩阵的列数;第三个参数是该矩阵元素的类型。这句话表示创建一个大小为240×320的矩阵,里面的元素为8位unsigned型,通道数(channel)有3个。
  • https://blog.csdn.net/seekforcode/article/details/82021855
    (以下为转载上面这个连接的转载)

不过最新的学习发现,如果CV::MAT中的数据是连续的,也可以把数据用memcpy拷贝到对应的data指针指向的内存中。不过需要注意的是如果不连续,这样做是不可以的。


我之前项目中需要做的是把CV::MAT中的数据按字节取出,通过tcp发送出去,对方收到后重新根据接收到的字节流组装起来显示就需要用到以下构造函数:

inline Mat::Mat(int _rows, int _cols, int _type)

需要输入的是创建的图像大小的行列和type,行列自然不必说,那么就说一下type吧,这边参考了https://blog.csdn.net/u013270326/article/details/72954232,由于这篇博文排版有点问题,所以我就把最核心的内容摘录下来,以备以后查阅

举个例子:

cv::Mat testImg(1080,1920,CV_8UC4);

可以看到这里的type都是 CV_<bit_depth>(S|U|F)C<number_of_channels>这种格式的。其解释为:

1--bit_depth---比特数---代表8bite,16bites,32bites,64bites
2--S|U|F--
        S--代表---signed int---有符号整形
        U--代表--unsigned int--无符号整形
        F--代表--float---------单精度浮点型
3--C<number_of_channels>----代表---一张图片的通道数,比如:
         1--灰度图片--grayImg---是--单通道图像
         3--RGB彩色图像---------是--3通道图像
         4--带Alph通道的RGB图像--是--4通道图像

举个栗子:

【1】CV_8UC1---则可以创建----8位无符号的单通道---灰度图片------grayImg

【2】CV_8UC3---则可以创建----8位无符号的三通道---RGB彩色图像---colorImg

【3】CV_8UC4--则可以创建-----8位无符号的四通道---带透明色的RGB图像

图像格式及转换代码

图像格式:
https://www.cnblogs.com/xiangism/p/5311314.html
格式转换:
https://www.brobwind.com/archives/1465

RGBA系列
首先就是rgba系列的格式,RGBA色彩主要用于色彩的显示和描述。常见的有RGBA/ARGB/BGRA/ABGR/RGB/BGR。这些格式都比较好理解了。R、G、B、A分别表示红绿蓝及透明通道。 (透明通道是说这个图片可以变透明)
以RGBA为例,就是4个字节表示一个颜色值,排列方式就是RGBARGBARGBA这样排列。而RGB,就是三个字节表示一个颜色值,没有透明通道,排列方式就是RGBRGBRGB。在通常的视频中,也是没有透明通道的(也有例外,比如MOV格式,是可以包含透明通道的)。所以当RGBA编码为视频色彩时,A是会被丢掉的。
当然,上面说的,是将每个色彩都用一个字节来表示的情况。RGBA也有RGBA_8888,RGBA_4444,RGB565等等众多格式,也就是并不是每个颜色都用一个字节来表示。以RGB565为例,是用两个字节来表示RGB三个色彩,R占5位,G占6位,B占5位。RGB565与RGB24相比,色彩上稍有损失,一般情况下,不细致对比,不容易发现这个损失,但是内存上会节约1/3的大小。

关于imshow(“rgb2depth”,i_depthToRgb)

前面的参数是要显示的窗口的名字,后面的参数是要显示的图片(存储图片数据的)
https://blog.csdn.net/weixin_42132144/article/details/82177438
https://blog.csdn.net/fanjiule/article/details/81604454

关于if(waitKey(1)==VK_ESCAPE) break;

  1. waitKey(1)
    1.1 waitKey()–这个函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下 键,则接续等待(循环)
    1.2 如下所示: while(1){ if(waitKey(100)==27)break; } 在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则继续循环
    1.3 如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件
    注意:python下cv.waitKey无响应原因
    按下键的时候,焦点要落在窗口上,不能落在cmd窗口上。
    另外,一般在imshow()后要使用waitKey(),给图像绘制留下时间,不然窗口会出现无响应情况,并且图像无法显示出来。
    int waitKey(int delay=0)
  • 延时delay = 0 函数则延时无限长,必须有键按下才继续执行。
  • 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。
    也就是说必须在有窗口显示的情况下,waitKey才有作用,否则无效。
    https://blog.csdn.net/a1809032425/article/details/81952952
    https://www.jianshu.com/p/30c40d7ce5dc
    如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件
  1. VK_ESCAPE
    https://blog.csdn.net/u010999396/article/details/52397401
    题目中VK_ESCAPE对应ESC,其ASCII码为27,所以这个句子的意思和上述是一样的,就是1ms内如果用户按下而ESC键,则跳出。

关于imwrite(output_RGB,i_rgb);

https://blog.csdn.net/qq_33835307/article/details/81450237
https://www.cnblogs.com/skyfsm/p/7136709.html
保存图像文件
示例:保存result数据为名字是“年-月-日-时-分-秒-rgb2depth.png”的文件

char output_rgb2depth[32];
sprintf_s(output_rgb2depth, "%4d-%2d-%2d-%2d-%2d-%2d-rgb2depth.png", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
imwrite(output_rgb2depth, result);

关于glColor3ubv(rgb);

https://blog.csdn.net/meegomeego/article/details/8306257
https://baike.baidu.com/item/glColor/9516595?fr=aladdin
(我只知道这个时opengl中的,但是不会用)

OpenCV图像知识相关推荐

  1. OpenCV基础知识 图像

    OpenCV基础知识 图像 位图模式 灰度模式 RGB模式 位图模式 位图模式是是1位深度的图像,只有黑和白两种颜色.它可以由扫描或置入黑色的矢量线条图像生成,也能由灰度模式转换而成.其他图像模式不能 ...

  2. python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...

    原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...

  3. 发现你的身形——OpenCV图像轮廓

    文章目录 写在最前 轮廓发现算法 边缘检测 写在最后 写在最前 我的意思不是说你长得很胖,emmmm,而是你的轮廓很大. --五星上将詹姆斯下士如是说 果然有图没图,理解是不一样的,这就体现了计算机视 ...

  4. [Python图像处理] 三十六.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  5. OpenCV图像运算+Moviepy实现视频旋转叠加

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.引言 在<OpenCV-Python常用图像运算:加减乘除幂开方对数及位运算&g ...

  6. Python OpenCV 图像平移,取经之旅第 10 天

    今天是持续写作的第 43 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客学习 OpenCV 中关于图像平移的方法,核心学习到的方法是 warpAffine . 取经之旅第 ...

  7. Python计算机视觉编程第十章——OpenCV基础知识

    Python计算机视觉编程 (一)OpenCV 的 Python 接口 (二)OpenCV 基础知识 2.1 读取和写入图像 2.2 颜色空间 2.3 显示图像及结果 (三)处理视频 3.1 视频输入 ...

  8. Python OpenCV 图像的几何变换,先说不平凡的 resize 函数

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 41 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  9. 难以置信!一篇文章就梳理清楚了 OpenCV 的知识体系

    本文分享自华为云社区<难以置信!一篇文章就梳理清楚了 Python OpenCV 的知识体系>,原文作者:梦想橡皮擦 地址|https://bbs.huaweicloud.com/blog ...

最新文章

  1. jquery即时搜索查询插件jquery.search.js
  2. 速度提升270倍!微软和浙大联合推出全新语音合成系统FastSpeech
  3. websocket 群/单聊 基础
  4. 字母s开头的c语言的工具,C语言库函数(S类字母) - 3
  5. list根据对象进行排序
  6. java.lang.NoClassDefFoundError:如何解决–第3部分
  7. 埋点测试-移动端/PC端
  8. truffle unbox webpack报错
  9. 使用StarUML生成live555类图
  10. 苹果全线支持支付宝,放不下的中国战场
  11. android 动态更改包名,Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)...
  12. 《libGDX移动游戏开发从入门到精通》一1.5 其他的一些准备工作
  13. matlab差分进化算法解决TSP问题
  14. u大师装iso系统linux,u大师教你iso文件系统的安装
  15. 腾讯互娱AMS | 我的打包我做主——浅析前端构建
  16. APP推广基础知识大全
  17. python 网页答题器_大话西游答题器 Python版本
  18. VC维的来龙去脉 | 火光摇曳
  19. 【Leetcode047】有效的字母异位词
  20. DDR(一)——基础理论

热门文章

  1. Eureka Server集群数据同步
  2. 回答这份秒杀攻略,99.9%的面试官会给你比大拇指
  3. 测试修改和删除用户的功能
  4. 在没学会用MySQL之前,我还是那个担心删库了就只能跑路的懵懂少年
  5. 17 - 01 - 10 计算机导论基础知识
  6. 图解 赫夫曼编码?(赫夫曼大叔开讲啦!!!)
  7. web集成3D模型,可动态展示设备模型及控制,互动性全息投影
  8. Linux EAS介绍
  9. 【开讲啦】20181029 oracle教学笔记
  10. 在docker里使用jupyterhub