core module:How to scan images, lookup tables and time measurement with OpenCV

查找表的优势是不需要进行计算,只需要读取结果。逐像素浏览图像,主要有三种方法。

在彩色图像中,每一列都有三个uchar项。在OpenCV中用Vec3b表示。用[ ]操作符就可以获取第n个子列。重要的是要记住OpenCV迭代器遍历列并自动跳到下一行。因此,对于彩色图像,如果您使用一个简单的uchar迭代器,您将只能访问蓝色通道值。

1、高效方法

①在性能方面,您无法击败经典的 C 样式运算符[ ](指针)访问。因此,我们可以推荐的最有效的分配方法是使用指向Mat数据部分的指针:

我们基本上只是获取一个指向每行开头的指针,并遍历它直到它结束。在矩阵以连续方式存储的特殊情况下,我们只需要请求一次指针并一直到最后。需要注意彩色图像:有三个通道,因此需要在每行中传递三倍以上的项目。

②Mat 对象的数据成员返回指向第一行、第一列的指针。如果此指针为 null,则该对象中没有有效的输入,这是检查图像加载是否成功的最简单方法。如果存储是连续的,我们可以使用它来遍历整个数据指针。如果是灰度图像

2、迭代器(安全)方法:确保您通过适当数量的 uchar 字段并跳过行之间可能发生的间隙是您的责任。使用迭代器方法,您需要做的就是询问图像矩阵的开始和结束,然后增加开始迭代器,直到到达终点。要获取迭代器指向的值,请使用 * 运算符

3、使用at方法或者Mat_类型:好处是可以随机访问你指定的数据

at方法还支持我们传入cv::Point类型的参数,例如at<uchar>(cv::Point2f(16, 18))。

4、OpenCV提供了修改图像值的功能,无需编写图像的扫描逻辑。我们使用核心模块的 cv::LUT()函数

其中I为输入图像,J为输出图像

5、时间计算

速度对比

方法

时间(毫秒)

高效方法

79.4717

迭代器

83.7201

at

93.7878

LUT

32.5759

源链接:OpenCV: How to scan images, lookup tables and time measurement with OpenCV

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值