精华内容
下载资源
问答
  • OpenCV Mat访问指定像素值

    千次阅读 2017-08-20 17:09:11
    转自:http://blog.sina.com.cn/s/blog_dc3c53e90101f3mx.html如果是采用Mat形式存储,想要访问灰度图像的灰度值,可以采用如下方法:int grayValue = image.at(i, j);如果是彩色图像,采用如下方法:int colorValue...

    转自:http://blog.sina.com.cn/s/blog_dc3c53e90101f3mx.html

    如果是采用Mat形式存储,想要访问灰度图像的灰度值,可以采用如下方法:

    int grayValue = image.at<uchar>(i, j);

    如果是彩色图像,采用如下方法:

    int colorValue = image.at<uchar>(i, j)[k];

    说明:
    其中grayValue中存放灰度值,image是读入的图像,i表示行,j表示列;
    colorValue中存放彩色像素值,iamge是读入的图像,i表示行,j表示列;k表示通道,即R、G、B,取值范围为2、1、0。

    展开全文
  • cv::Mat访问元素的方法

    2015-07-18 12:28:02
     MatIterator_<uchar> it = mat_CV_8UC1.begin(), it_end = mat_CV_8UC1.end();  for(int cnt = 1; it != it_end; ++it)  {   cout ( int(*it) > 200 ? 1 : 0) ;   if( (cnt++ % mat_CV_8UC1.cols) ==0...

    #include "opencv2/opencv.hpp"
    #include <iostream>


    using namespace std;
    using namespace cv;
     
    int main(int argc,char** argv)
    {


    const char* filename = "google.png";

    //CV_8UC3
    //相应的CV_8SC3---Vec3s
    //相应的CV_16UC3---Vec3w
    Mat mat_CV_8UC3 = imread(filename,IMREAD_COLOR);
       for( size_t nrow = 0; nrow < mat_CV_8UC3.rows; nrow++)
        {
      for(size_t ncol = 0; ncol < mat_CV_8UC3.cols; ncol++)
      {
      Vec3i bgr = mat_CV_8UC3.at<Vec3b>(nrow,ncol);//用Vec3b也行
      cout   << "("<<bgr.val[0]<<","
      <<bgr.val[1]<<","
      <<bgr.val[2]<<")";
      }
      cout << endl;
        }
        
        for( size_t nrow = 0; nrow < mat_CV_8UC3.rows; nrow++)
        {
        uchar* data = mat_CV_8UC3.ptr<uchar>(nrow);
      for(size_t ncol = 0; ncol < mat_CV_8UC3.cols * mat_CV_8UC3.channels(); ncol++)
      {
    cout << int( data[ncol] ) ;
      }
      cout << endl;
        }


       //------CV_8UC1----------start---
       //
    Mat mat_CV_8UC1 = imread(filename,IMREAD_GRAYSCALE);
       for( size_t nrow = 0; nrow < mat_CV_8UC1.rows; nrow++)
       {
      for(size_t ncol = 0; ncol < mat_CV_8UC1.cols; ncol++)
      {
      uchar val = mat_CV_8UC1.at<uchar>(nrow,ncol);
      //
      cout << (int(val) > 200 ? 1 :0) ;//cout<<int(val)<< endl ;
      }
      cout << endl ;
       }
       cout << endl;


        for ( size_t row = 0 ; row < mat_CV_8UC1.rows ; ++row) 
        {
    uchar* ptr = mat_CV_8UC1.ptr<uchar>(row);
    for ( size_t col = 0 ; col < mat_CV_8UC1.cols ; ++col) 
    {
    cout << ( int(ptr[col]) > 200 ? 1 :0) ;//cout<<int(val)<< endl ;
    }
    cout << "\n" ;
    }
    cout << endl;

       MatIterator_<uchar> it = mat_CV_8UC1.begin<uchar>(), it_end = mat_CV_8UC1.end<uchar>();
       for(int cnt = 1; it != it_end; ++it)
        {
          cout << ( int(*it) > 200 ? 1 : 0) ;
          if( (cnt++ % mat_CV_8UC1.cols) ==0 )
          cout << endl;    
        }
       //------CV_8UC1----------end---   


        
      return 0;

    }


    原文地址:http://blog.csdn.net/moc062066/article/details/6949826

    展开全文
  • 多维 opencv Mat访问

    2020-12-12 12:35:26
    ① 二维、三维、四维等任意维度的Mat的常用建立方法; ② 任意维度Mat中值的索引; ③ 以及一些Mat常用的操作。 下面是对各维度矩阵的介绍:   注意:下面的操作只是我常用的操作方法,不是唯一的方法,对于...

    你看完这篇文章之后,将学会以下知识:
    ① 二维、三维、四维等任意维度的Mat的常用建立方法;
    ② 任意维度Mat中值的索引;
    ③ 以及一些Mat常用的操作。
    下面是对各维度矩阵的介绍:
      注意:下面的操作只是我常用的操作方法,不是唯一的方法,对于那些没有思路的同学,下面的内容希望起到抛砖引玉的效果。

      我以单通道的uchar类型的图片做例子

    1. 二维Mat
      二维的Mat是我们最常使用的类型,它就和我们的图片直接对应

    构造函数:Mat(int rows, int cols, int type, const Scalar& s);
    变量声明:cv::Mat mat2D(100, 100, CV_8UC1, cv::Scalar(0));
    1
    2
      上述变量声明的代码,定义了一个100x100的Mat,它有一个通道,通道中的数据类型都是uchar,每一个对应位置的值都是0。

    对于这种二维矩阵的索引,有多种方法:
      第一种(效率不高)

    uchar a = mat2D.at<uchar>(i,j)
    1
      第二种

    uchar* a = mat2D.ptr<uchar>(0);//指针指向mat2D的0行首地址
    uchar a = mat2D.ptr<uchar>(1)[5];//取出(1,5)中的值
    1
    2
    2. 三维Mat
      三维Mat一般很少用,对于它的操作:

    构造函数:Mat(int ndims, const int* sizes, int type);

    变量声明:
    int size[3] = {100, 100, 100};
    cv::Mat mat3D(3, size, CV_8UC1, cv::Scalar(0));
    1
    2
    3
    4
    5
      上面变量声明的代码,声明了一个维度为3,大小为100x100x100的Mat。

    对于三维Mat的索引:
      第一种方法(效率不高)

    uchar a = mat3D.at<uchar>(4,5,6);//取出(4,5,6)中对应的值
    1
      第二种方法

    uchar* a = mat3D.ptr<uchar>(0,0);//a指向前两维限定下的行首的地址
    uchar a = mat3D.ptr<uchar>(0,0)[4];//取出(0,0,4)中的值
    1
    2
    3. 四维Mat
    int size[4] = {100, 100, 100, 100};
    cv::Mat mat4D(4, size, CV_8UC1, cv::Scalar(0));
    1
    2
    对于四维Mat的索引,不能使用at函数,因为不支持超过三维的Mat

    uchar* a = mat3D.ptr<uchar>(0,0,0)[4];//取出(0,0,0,4)中对应的值
    1
    4. 五维Mat
    int size[5] = {100, 100, 100, 100, 100};
    cv::Mat mat5D(5, size, CV_8UC1, cv::Scalar(0));
    1
    2
      大于四维的Mat,既不能使用at,也不能使用ptr访问元素。下面介绍我常用的方法:这里我们可以使用Mat类中的data成员变量,它指向Mat数据区的首地址,对于Mat类型的数据,它们是按照线性方式存值的,我们知道首地址之后,就可以通过指针偏移的方式,去索引任意元素的值。
    对于 100x100x100x100x100 的五维Mat,如果索引要 [a,b,c,d,e] 中的值,则可以使用下面的方式

    uchar a = *(mat5D.data + a*100*100*100*100 + b*100*100*100 + c*100*100 + d*100 + e);
    1
      如果你在Mat中存储的不是CV_8UC1,而是别的类型,比如是CV_32FC1,那么就不能直接使用data,因为它默认是uchar类型的指针,需要将它强转为float类型。代码如下:

    float a = *((float*)mat5D.data + a*100*100*100*100 + b*100*100*100 + c*100*100 + d*100 + e);
    1
    对于更高维的情况,使用上面的五维的方法推广就行,当然上述所有的方法,都不是最好的或者是唯一的,只是我个人比较常用的。

    展开全文
  • mat访问越界

    千次阅读 2013-04-06 19:51:19
    很奇怪,用mat.at(i,j)=d会导致访问失败,用: double *ptr=mat.ptr(i); ptr[j]=d; 却可以。。。

    很奇怪,用mat.at<double>(i,j)=d会导致访问失败,用:

    double *ptr=mat.ptr<double>(i);
    ptr[j]=d;

    却可以。。。

    展开全文
  • cv::Mat 访问数据错误

    千次阅读 2014-01-02 13:34:42
    今天遇到了一种情况,使用mat.at或者.ptr访问时,debug模式下出现异常(应该是提示越界),release下得到了非常诡异的结果,使用mat.data指针也无法正常访问,但是直接cout 我是定义了一个mat,并对其进行了初始化...
  • Opencv FlOAT64类型Mat访问错误

    千次阅读 2019-03-15 09:41:45
    最近在写图像拼接的算法,由于需要对变换矩阵homo进行一定的处理,需要对FLOAT64型Mat元素进行改变,查了许多资料有很多好用的,比如说这个: https://blog.csdn.net/lyq_12/article/details/84316288 但是我一...
  • opencv学习笔记之Mat元素访问

    千次阅读 2019-06-19 18:26:35
    CV::Mat 地址访问 Mat元素访问方法如下 Mat类的at方法 地址访问 细节可参考https://blog.csdn.net/xiaowei_cqu/article/details/19839019 /* //use g++ to build g++ read_mat.cpp -o read -std=c++11 -lopencv...
  • ()成员函数访问数组元素 最基础的直接访问手段是通过模板成员函数at&amp;lt;&amp;gt;(),对数组元素进行访问。因为是模板函数,所以该函数可以接受各种类型和维度的参数。使用该函数访问数组元素的例子如下...
  • 访问Opencv中的Mat数据

    千次阅读 2019-08-31 10:17:39
    如何访问Opencv中的Mat数据 第一种:使用成员函数at cv::Mat m = (cv::Mat_<int>(2 ,3) << 1,2,3,4,5,6);//3行2列 for (int i = 0; i < m.rows; ++i) { fo...
  • opencv2.0以后c++接口的API函数成为一种趋势,常用...新数据结构cv::Mat元素的访问(读取、存取)的方法对很多初学者来还是很不明了的。 现在综合一些资料,在此抛砖引玉。 //http://blog.csdn.net/moc062066 //20
  • OpenCV Mat 访问 修改像素数据

    千次阅读 2019-02-07 13:12:54
    Mat image = imread(“test.jpg”); if (image.empty()) { cout “不能加载图像…” ; return -1; } Mat dst; cvtColor(image, dst, CV_BGR2GRAY); int height = image.rows; int width = image.cols; int ...
  • OpenCV Mat类的访问

    2020-10-19 16:21:20
    OpenCV Mat是OpenCV中应用最多的一个类,本文分享了Mat数据的判断及访问数据的常用方式,最后对形参中InputArray进行了说明,官网介绍链接:https://docs.opencv.org/4.4.0/d3/d63/classcv_1_1Mat.html 1.Mat数据...
  • 3. 不通过ptr指针,直接通过Mat进行访问--->效率最低, 不适合遍历操作,常用于随机位置的访问, "The final method isn't recommended for scanning. It was made to acquire or modify somehow random elements in the...
  • OpenCV中6种访问Mat元素的方法

    万次阅读 多人点赞 2018-11-21 11:39:40
    Mat中不管是以at访问还是ptr访问,都是行优先 ,先Y轴后X轴(即先行后列) 1、使用at访问 /* *OpenCV2中Mat的at操作访问矩阵元素 * */ #include &lt;highgui.h&gt; using namespace std ; using ...
  • (行,列) ”访问Mat矩阵元素并赋值 int main() { Mat img = Mat::zeros(Size(10000, 10000), CV_64FC1); DWORD startTime = GetTickCount(); for (int i = 0; i < 10000; i++) { for (int j = 0; j <
  • 本文参考作者浅墨_毛...对矩阵Mat中像素的访问常用的几种方法有: 通过获取矩阵数据的指针进行访问 通过迭代器访问 通过at函数访问   为此,对这三种方式的性能做了相关的测试。测试方法是对图像像素做映射压...
  • 本文讲述了OpenCV中几种访问矩阵元素的方法,在指定平台上给出性能比较,分析每种矩阵元素访问方法的代码复杂度,易用性。 一、预备设置 本文假设你已经正确配置了opencv的环境,为方便大家实验,在文中也给...
  • 参考:【OpenCV】访问Mat中每个像素的值(新) 膜拜大佬 以下例子代码均针对8位单通道灰度图。 1 .ptr和[]操作符 Mat最直接的访问方法是通过.ptr<>函数得到一行的指针,并用[]操作符访问某一列的像素值...
  • 用于将uchar*数据转化为Mat型数据,单通道 Mat uchar2mat(int height,int width,uchar* ch) { Mat ma(height, width, CV_32FC1); for (int i = 0; i &amp;amp;amp;amp;amp;lt; height; i++) { for (int j =...
  • 上一个学习笔记中对Mat进行了详细的介绍,并且简单介绍了Mat元素访问的3种基本方法,通过ptr行指针、data数据指针和at模板函数。本章以二维矩阵为例,对各种访问方式进行详细的介绍,并给出各种访问方式在debug模式...
  • 本文讲述了OpenCV中几种访问矩阵元素的方法,在指定平台上给出性能比较,分析每种矩阵元素访问方法的代码复杂度,易用性。
  • opencv cv::Mat 定义 数据访问

    千次阅读 2018-06-26 18:15:04
    opencv 的mat经常用,无奈人老记性不好,每次用的时候总忘记然后出bug,总结下常用的东西:1.定义Mat定义Mat并初始化cv::Mat R;...2. 访问数组Mat的不同方法(按效率从高到低排列)、2.1 指针按照向量形式...
  • 2020.6.11 opencv访问多通道Mat对象中的值 //2020.6.11 opencv访问多通道Mat对象中的值 #include <opencv2/core.hpp> using namespace cv; #include <iostream> using namespace std; //typedef Vec&...
  • 访问Mat某一个像素值

    2019-04-22 12:09:00
    mat.at<uchar>(row, col); 如果想要用cout打印出来,前面要加上(int),否则打印出来的是空字符; 转载于:https://www.cnblogs.com/canyeweiwei/p/10749386.html
  • OpenCV3学习(2.1)——图像Mat数据的访问-at/ptr/iterator [opencv3::Mat元素的获取、at、ptr](https://blog.csdn.net/BoaHock/article/details/80790323) OpenCV Mat数据类型指针ptr的使用 ...
  • Mat image;//申明Mat型数据 image.at<Vec3b>(i, j);//获取image位于(j,i)处的像素点 值得注意的是i、j分别对应图像数据的y(rows)与x(cols),与我们的常识相反。 测试代码: //test Mat img...
  • 为啥我这样访问矩阵元素没成功,我的SAD没得到temp矩阵里面的元素累加和?我已经检验过我的temp矩阵,里面有值 还有: int SAD = 0; Mat temp; temp = l - r; cout ; cout ; //Mat t; temp = abs(temp); ...
  • 学习openCV之Mat类型访问每个像素

    千次阅读 2014-12-04 14:45:06
    网上关于mat类型的讲解很多,还有人将不同方式访问mat类型的时间打印出来,进行比较访问的快慢。但是我发现很多文章都是基于openCV中文论坛上的例子来写的(具...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,468
精华内容 9,387
关键字:

mat访问