OpenCV使用过程中对RGB图像进行操作(1)

本篇主要是在使用OpenCV的过程中,我用到的对图像进行的一些基本操作。

  • 电脑系统:win10 x64
  • 处理器:酷睿i5 9300H
  • Visual Studio 2019
  • Realsense D435i摄像头
  • 使用语言:C,C++
  • 所用到的内容:realsenseopencv

操作一:将realsense摄像头获得的frame数据转换为OpenCv的mat数据。
这一步直接使用mat数据定义函数Mat进行转换即可:

Mat color(Size(width, height), CV_8UC3, (void*)color_frame.get_data(), Mat::AUTO_STEP);

该代码将摄像头获得的color_frame转换为分辨率为width×height的Mat数据color,CV_8UC3则是点明每个点的类型,深度数据的类型为CV_16U
如果形成了mat数据后,还想进一步限制感兴趣的范围,可以使用Rect interest_roi(x, y, w, h);定义感兴趣的区域,再重新用Mat定义新的mat数据即可Mat color_roi = color(interest_roi);

操作二:读取RGB图像各个像素点的r、g、b值。
这里我主要用到了两种方法,<at>函数直接读取和使用指针<ptr>。具体用法其他很多地方都有介绍,这里就不赘述。关于这两种访问方式,我个人更倾向于使用at进行读取,因为at更加直观,而ptr则需要知道rgb三通道元素存储的方式(RGB三通道存储方式)。但是在读取速度方面,指针ptr读取速度远超at模式,debug模式下,读取1280×720的图像中所有的红色通道需要接近100ms,但使用指针进行读取最快可以达到2ms,因此对我个人而言,在需要大量遍历像素点的情况下,推荐使用指针进行读取,而如果只需要读取少量几个点,则使用at函数会更不容易出错。

操作三:点击图像获取该点坐标与RGB值。
这里需要用到函数setMouseCallback,具体用法可以参照该博客。需要注意的是,该博客中列出的setMouseCallback函数不需要自己进行定义,但是OnMouse函数需要自己进行定义,需要做什么全都是在自己定义的函数中进行操作。部分情况下可能会出现报错:

未定义标识符"CV_EVENT_XXX”

或报错:

未定义标识符"CV_FLAG_XXX"

这是可以参照该博客添加头文件进行解决。至于想要在OnMouse函数中使用setMouseCallback函数中最后输入的Mat数据,可以通过Mat& new_mat = *(Mat*) ustc;进行传递,结合之前获取rgb值的方法便可获取点击点的rgb值。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页