OpenCV实验系列之查表函数LUT()的使用

OpenCV实验系列之查表函数LUT()的使用

LUT()查表函数功能说明

LUT函数是用于对Mat矩阵数据进行快速遍历修改的函数,从官网给出的性能对比上可以看出对比其他遍历方法,其在速度上有极大的优势。
这里写图片描述
但该函数只能对八位的矩阵数据进行遍历,对于其他数据格式则需要进行其它方式的遍历处理。

LUT()的基本思想

LUT()基本思想是查表,既将矩阵中所有可能遇到的值都计算一遍储存在数组中,在遍历过程中只是将对应的查表值进行赋值即可,这样可以避免大量的重复计算,这是典型的使用存储空间换取速度的做法。但这也限制了其应用范围,其只能运用于有限结果的计算。

LUT()的基本使用方法

以下是根据官方手册提供的例程更改的典型使用方法

Mat I;//输入矩阵
Mat J;//输出矩阵
Mat lookUpTable(1, 256, CV_8U);//查表用矩阵

uchar* p = lookUpTable.ptr();//填充查表值
for( int i = 0; i < 256; ++i)
        p[i] = table[i];//table[i]为i经计算后的值,可替换为公式。

LUT(I, lookUpTable, J);//进行遍历

LUT()例程

#include<iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

void main()
{
    double t = (double)getTickCount();//计时开始

    Mat src;
    src=imread("shape.png",IMREAD_GRAYSCALE);
    imshow("src",src);
    Mat dst = src.clone();
    imshow("dst",dst);
    Mat lookUpTable(1, 256, CV_8U);

    uchar* p = lookUpTable.ptr();
    for( int i = 0; i < 256; ++i)
        p[i] = i/2;

    LUT(src,lookUpTable,dst);
    imshow("dst_scan",dst);

    t = ((double)getTickCount() - t)/getTickFrequency();//计算耗时
    cout << "Times passed in seconds: " << t << endl;
    waitKey(0);
}

这里写图片描述
原图
这里写图片描述
遍历处理后图片

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值