zoukankan      html  css  js  c++  java
  • OpenCV基于字节指针进行高效像素遍历

    直接获取Mat对象的像素块的数据指针,基于字节指针操作,实现快速像素遍历方法(1280x720, 彩色,仅需几毫秒完成)。Mat对象的数据组织形式与像素块数据的存储方式,Mat对象由两个部分组成,元数据头部加像素数据块部分。

    代码实现如下:

    void img_Byte_ptr(Mat &image) {
        double t1 = getTickCount();
        int w = image.cols;
        int h = image.rows;
        for (int row = 0; row < h; row++) {
            uchar* uc_pixel = image.data + row*image.step;
            for (int col = 0; col < w; col++) {
                uc_pixel[0] = 255 - uc_pixel[0];
                uc_pixel[1] = 255 - uc_pixel[1];
                uc_pixel[2] = 255 - uc_pixel[2];
                uc_pixel += 3;
            }
        }
        double t2 = getTickCount();
        double t = ((t2 - t1) / getTickFrequency()) * 1000;
        ostringstream ss;
        ss << "Execute time : " << std::fixed << std::setprecision(2) << t << " ms ";
        putText(image, ss.str(), Point(20, 20), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(0, 0, 255), 2, 8);
        imshow("result", image);
    }

    在OpenCV C++中Mat对象的内存管理由OpenCV框架自动负责内存分配与回收,基于智能指针实现内存管理。

    唯一正确的是直接使用data指针直接访问,但是这个在OpenCV官方的教程都没有明确说明。

  • 相关阅读:
    字符串题表
    插头dp题表
    点分治题表
    Kd-tree题表
    【BZOJ 4605】崂山白花蛇草水 替罪羊树套线段树
    假的kd-tree小结
    【BZOJ 1492】 [NOI2007]货币兑换Cash 斜率优化DP
    CDQZ 2017 游记
    【BZOJ 1146】[CTSC2008]网络管理Network
    联赛之前的题表(已完成)汇总(可能有遗漏)
  • 原文地址:https://www.cnblogs.com/jeshy/p/11118346.html
Copyright © 2011-2022 走看看