【opencv练习06-Scan图像の三种方法】

//方法1【高效方式】*****************************************

//压缩颜色值
    uchar* p;
    for( int i = 0; i < nRows; ++i)        //指针每一行
    {
        p = I.ptr<uchar>(i);        //p指向,第i行的地址
        for( int j = 0; j < nCols; ++j)
        {
            p[j] = table[p[j]];        //修改i行的j元素颜色值
        }
    }
    return I;


//方法2【安全方式,迭代器】*****************************************
**单通道——uchar
三通道——Vec3b**
  switch(channels)     (http://img.blog.csdn.net/20160825234022144)                       
    {
    case 1:
        {
            for(int i=0; i<I.rows; ++i )
                for(int j=0; j< I.cols; ++j)
                    I.at<uchar>(i,j) = table[I.at<uchar>(i,j)];
            break;
        }
    case 3:
        {
            Mat_<Vec3b> _I = I;
            for(int i=0; i<I.rows; ++i )
                for(int j=0; j< I.cols; ++j)
                {
                    _I(i,j)[0] = table[_I(i,j)[0]];
                    _I(i,j)[1] = table[_I(i,j)[1]];
                    _I(i,j)[2] = table[_I(i,j)[2]];
                }
            I = _I;
            break;
        }
    }
    return I;

//方法3【动态地址计算】*****************************************

    switch(channels)                            
    {
    case 1:
        {
            MatIterator_<uchar> it,end;            
for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it)//初始化,条件++ 
                *it = table[*it];                //迭代器访问
            break;
        }
    case 3:
        {
            MatIterator_<Vec3b> it,end;
            for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it)
            {
                (*it)[0] = table[(*it)[0]];
                (*it)[1] = table[(*it)[1]];
                (*it)[2] = table[(*it)[2]];
            }
        }
    }
    return I;

//方法4【库实现】*****************************************
    Mat lookUpTable(1, 256, CV_8U);
    uchar* p = lookUpTable.data;
    for(int i = 0; i < 256; ++i)
        p[i] = table[i];

    Mat out_image4 = image.clone();             
    LUT(image, lookUpTable,out_image4);

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值