分块处理方法耗时对比

测试图像2560×1920,blocksize = 10;10张图片取平均。

方法一

将每个方块赋给一个新的图像,思路简单,在十二线扫描法中使用。平均耗时240ms


int H2 = Imgs.rows/SampleScale;     //image height
    int W2 = Imgs.cols/SampleScale;     //image width
    time_t tic_s,tic,toc;
    tic_s = clock();
    Mat ImgSample;
    ImgSample.create(H2,W2,CV_8UC1);
    Mat Iblock = Mat(SampleScale,SampleScale,CV_8UC1);
    for(int i=0;i<W2;i++)
    {
        for(int j=0;j<H2;j++)
        {
            Rect rect(i*SampleScale,j*SampleScale,SampleScale,SampleScale);
            Imgs(rect).copyTo(Iblock);
            double minval,maxval;
            minMaxLoc(Iblock,&minval,&maxval);
            *(ImgSample.data+j*W2+i) = maxval-minval;
            //ImgSample.at<uchar>(j,i) = maxval-minval;
        }

方法二

省略掉复制一步,平均耗时211ms

方法三

平均耗时145ms


for(int x = 0;x < M2;x++)
    {
        uchar* pImgSample = ImgSample.ptr<uchar>(x);
        for(int y = 0;y < N2;y++)
        {
            double maxval,minval;
            minMaxLoc(Imgs(cv::Rect(SampleScale*y,SampleScale*x,SampleScale,SampleScale)),&minval,&maxval);
            pImgSample[y] = maxval - minval;
        }
    }

分析:
方法三将指针计算放到了第二重for循环外面,减少了计算量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值