图像遍历计时问题

第二种是第一种的三倍速度。 第一种来自视觉SLAM14讲第五章程序,主要是定义太非时间,还有就是指针调用图片数据时间是否节约时间也是问题。

// 使用 std::chrono 来给算法计时
    chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
    for ( size_t y=0; y<image.rows; y++ )
    {
        // 用cv::Mat::ptr获得图像的行指针
        unsigned char* row_ptr = image.ptr<unsigned char> ( y );  // row_ptr是第y行的头指针
        for ( size_t x=0; x<image.cols; x++ )
        {
            // 访问位于 x,y 处的像素
            unsigned char* data_ptr = &row_ptr[ x*image.channels() ]; // data_ptr 指向待访问的像素数据
            // 输出该像素的每个通道,如果是灰度图就只有一个通道
            for ( int c = 0; c != image.channels(); c++ )
            {
                unsigned char data = data_ptr[c]; // data为I(x,y)第c个通道的值
            }
        }
    }
    chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
    chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 );
    cout<<"遍历图像用时:"<<time_used.count()<<" 秒。"<<endl;



    chrono::steady_clock::time_point t3 = chrono::steady_clock::now();  
    for(int x=0;x<image.rows;x=x+1)
  {
    for(int y=0;y<image.cols;y=y+1)
    {
      int r = image.at<Vec3b>(x, y)[0];	
    }
  }
    chrono::steady_clock::time_point t4 = chrono::steady_clock::now();
    chrono::duration<double> time_useds = chrono::duration_cast<chrono::duration<double>>( t4-t3 );
    cout<<"遍历图像用时:"<<time_useds.count()<<" 秒。"<<endl;

猜你喜欢

转载自blog.csdn.net/unlimitedai/article/details/87821684