提取opencv mat 图像数据到buffer中_6、OpenCV中最快的访问图像数据的方式

本文探讨了在OpenCV中访问和修改图像数据的三种方法:at函数、指针访问和查找表。通过示例代码对比,指针访问和查找表在效率上优于at函数,特别是查找表,对于3120X4160大小的图像,速度优势明显。同时,介绍了如何应用这些方法到单通道图像上。
摘要由CSDN通过智能技术生成

在上一次中的最后,提到了修改图像数据的操作。但是,这种操作是比较慢的。下面说一下访问图像数据的几种方式。毕竟在实际的图像处理中,时刻少不了要自己写算法,这就必须访问图像数据,而快的访问方式可以大大提高效率。下面的例子中,还以修改图像数据为例。这些例子中,都通过用255减去原像素值来修改图像数据。其实这种操作就是反色操作。

例9-1 第一种修改方式,使用at访问修改像素值,这就是上次的例8,现在加上处理时间放在这里。

#include#includeusingnamespace cv;usingnamespace std; int main(intargc, char** argv){
        Mat src = imread("E:/1.jpg", 1);    Mat modifyImg = Mat(src.size(), src.type());//新建一个与src大小、类型相同的空白图像    namedWindow("例9_1原图", 0);    imshow("例9_1原图", src);    double time0 = static_cast<double>(getTickCount());    int height = src.rows;//图片的高度    int width = src.cols;//图片的宽度    for (int i = 0; i     {
             for (int j = 0; j          {
                 modifyImg.at(i, j)[0] = 255 - src.at(i,j)[0];             modifyImg.at(i, j)[1] = 255 - src.at(i,j)[1];             modifyImg.at(i, j)[2] = 255 - src.at(i,j)[2];         }    }    time0 = ((double)getTickCount() - time0) / getTickFrequency();    cout <<"使用at的运行时间为:"<"秒"<endl;    namedWindow("例9_1修改图", 0);    imshow("例9_1修改图", modifyImg);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>