zoukankan      html  css  js  c++  java
  • OpenCV中对Mat的遍历访问与赋值

    一、访问

    对于Mat的访问有两种方式

    第一种,利用Mat::at进行访问

    //读取3通道彩色图像
    Mat img = imread("图片地址");
    int px;
    //读取图像中第一行第一列,Blue通道数据
    int px = img.at<Vec3b>(0, 0)[0];

    第二种,利用Mat的成员ptr指针进行访问

    //读取3通道彩色图像
    Mat img = imread("图片地址");
    //将Mat中的第一行地址赋予pxVec
    uchar* pxVec=img.ptr<uchar>(0);
    //遍历访问Mat中各个像素值
    int i, j;
    int px;
    for (i = 0; i < img.rows; i++)
    {
        pxvec = img.ptr<uchar>(i);
        //三通道数据都在第一行依次排列,按照BGR顺序
        //依次赋值为1
        for (j = 0; j < img.cols*img.channels(); j++)
        {
            px=pxvec[j];
            //do anything
    } }

    二、赋值

    不能用Mat::at进行赋值,只能用ptr对Mat中的像素点进行赋值

    一个完整的例子如下:

    #include "stdafx.h"
    #include <opencv2corecore.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2imgprocimgproc.hpp>
    #include <vector>
    
    int main()
    {
        //对Mat进行遍历赋值
        //初始化Mat数据结构,256*256,三通道8位(256色)图像
        Mat myimg(256,256,CV_8UC3);
        //取像素数据首地址
        uchar* pxvec = myimg.ptr<uchar>(0);
        int i, j;
        for (i = 0; i < myimg.rows; i++)
        {
            pxvec = myimg.ptr<uchar>(i);
            //三通道数据都在第一行依次排列,按照BGR顺序
            //依次赋值为1
            for (j = 0; j < myimg.cols*myimg.channels(); j++)
            {
                pxvec[j] = 1;
            }
        }
        //展示图像
        imshow("abc", myimg); waitKey(10000);
    }

    结果如下:

  • 相关阅读:
    bootstrap 幻灯片(轮播)
    图片轮播
    JS 标签页切换(复杂)
    JS 标签页切换
    js获取日期时间
    HTML标签marquee实现滚动效果
    webstorm 快捷键,很多人想知道的三个常用快捷键
    js红包算法随机分配
    node.js express,ejs后端模板
    递归思路简单例子
  • 原文地址:https://www.cnblogs.com/thundertt/p/6368754.html
Copyright © 2011-2022 走看看