Opencv学习笔记之遍历图片

Opencv中有很多的方法遍历图片,笔者列出所遇见的几种遍历图片元素的方法其实就是如何遍历矩阵。为了查看出几种遍历图形的的不同,代码中会通过chrono来计算每次遍历的时间。

1、方法1:

使用Opencv中的指针对获取的图形进行遍历。

使用到Mat::ptr()此函数返回的是uchar类型,返回的是y行的第一个元素的指针。通过指针的话就可以实现对图片的遍历。我们处理的图形分别有彩色和灰度的,彩色图形一般是RGB这样需要遍历三个矩阵。就需要Mat::channels()返回的是通道数。RGB为3灰度为1。接下来我们就可以开始遍历图片了。

    chrono::steady_clock::time_ponit t1=chrono::steady_clock::now();
    for(seiz_t y=0;y<img.rows;y++
    {
        unsigned char* row_ptr=img.ptr<unsigned char>(y);//指向y行第一个元素的指针
        for(size_t x;x<img.cols;x++)
        {
            unsigned char *data_ptr=&row_ptr[x*img.channels()];//img.channnels返回的图形的通道数,rgb为3 灰度为1
            for(int c=0;c<img.channels();c++
            {
                 unsigned char datea=data_ptr[c];   
            }    
        }
    }
    chrono::duration<double> time_used =chrono::duration_cast<chrono::duration<double>>
    (t2-t1);
    cout<<"遍历图形时间:\n"<<time_used.count()<<"秒"<<endl;

2、方法2:

本方法就很简单直接使用Mat的对象进行遍历。废话不多说直接上代码!使用Mat::at(int row ,int col)对图形进行遍历

    chrono::steady_clock::time_point t3=chrono::steady_clock::now();
    for(int y=0;y<img.rows;y++)
    {
        for(int x=0;x<img.cols;x++)
        {
            
            for (int i = 0; i < img.channels(); i++)
            {
                unsigned char data=img.at<cv::Vec3b> (y,x)[i];
            }
            
        }
    }
    chrono::steady_clock::time_point t4=chrono::steady_clock::now();
    chrono::duration<double> timecha=chrono::duration_cast<chrono::duration<double>>(t4-t3);
    cout<<"遍历图形时间:\n"<<timecha.count()<<"秒"<<endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日亿学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值