高效遍历图像

如何遍历一副图像?简单的方法就是写一个双层循环,增量分别为行和列,如下所示:

Mat img = Mat(rows, cols, CV_8UC3,Scalar(0));
for(int i = 0;i < rows; i++)
{
    for(int j = 0; j < cols; j++)
    {
           img.at<Vec3b>(i,j)[0] = 255;
img.at<Vec3b>(i,j)[1] = 255;
       img.at<Vec3b>(i,j)[2] = 255; } }

上述在JetSonNano上遍历一张1280×720的图片需要70-80ms!!!

如何高效遍历一副图像?

核心思想有:(1)使用指针,减少底层内存单元操作的次数。(2)减少双重循环中外层循环的操作次数。

如下:

Mat recv_img = Mat(IMGHEIGHT,IMGWIDTH,CV_8UC3,Scalar(0));
        int nl = IMGHEIGHT;
        int nc = IMGWIDTH;
        int n = 21;
        if(recv_img.isContinuous())
        {
            nc *= nl;
            nl = 1;
            
        }
        for(int i = 0; i < nl; i++)
        {
            uchar* data = recv_img.ptr<uchar>(i);
            for(int j = 0; j<nc; j++)
            {

                *data++ = remsg.at(n);
                *data++ = remsg.at(n+1);
                *data++ = remsg.at(n+2);
                n = n + 3;
            }
        }
原文地址:https://www.cnblogs.com/zhibei/p/12336888.html