• opencv之mat元素访问


    • 单通道mat元素访问:使用 img.at<float>(row,col)
     1 #include <stdlib.h>
     2 #include <stdio.h>
     3 #include <opencv/cv.h>
     4 #include <opencv/highgui.h>
     5 #include <opencv2/opencv.hpp>
     6 
     7 using namespace std;
     8 using namespace cv;
     9 int main()
    10 {
    11     Mat img(3, 4, CV_32FC1, Scalar_<float>(12.625));
    12     
    13     cout<<img<<endl;
    14     cout<<endl;
    15     /*cout << "dims:" << img.dims << endl;   
    16     cout << "rows:" << img.rows << endl;   
    17     cout << "cols:" << img.cols << endl;   
    18     cout << "channels:" << img.channels() << endl;
    19     
    20     cout << "elemSize:" << img.elemSize() << endl;  
    21     cout << "elemSize1:" << img.elemSize1() << endl;*/
    22 
    23     
    24 
    25     //元素的遍历:
    26     for(int row = 0; row < img.rows; row++)
    27     {
    28         for(int col = 0;col < img.cols; col++)
    29         {
    30             cout<<img.at<float>(row,col)<<" ";
    31         }
    32         cout<<endl;
    33     }
    34     
    35     system("pause");
    36     return 0;
    37 }

    备注1:创建图像Mat时候可以用到

     Mat img(3, 4, CV_32FC1, Scalar_<float>(12.625));
    3乘4的图片~
    Mat_<uchar>对应的是CV_8U,
    Mat_<char>对应的是CV_8S,
    Mat_<int>对应的是CV_32S,
    Mat_<float>对应的是CV_32F,
    Mat_<double>对应的是CV_64F,对应的数据深度如下:
    
    Scalar_<**>的**处填上对应的类型!!
    CV_8U
    - 8-bit unsigned integers ( 0..255 ) CV_8S - 8-bit signed integers ( -128..127 ) CV_16U - 16-bit unsigned integers ( 0..65535 ) CV_16S - 16-bit signed integers ( -32768..32767 ) CV_32S - 32-bit signed integers ( -2147483648..2147483647 ) CV_32F - 32-bit ?oating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN ) CV_64F - 64-bit ?oating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )

    备注2

    因为单通道,所以上例访问元素时候对应写成
    img.at<float>(row,col)
    ...
    • 多通道mat元素访问:
     1 #include <stdlib.h>
     2 #include <stdio.h>
     3 #include <opencv/cv.h>
     4 #include <opencv/highgui.h>
     5 #include <opencv2/opencv.hpp>
     6 
     7 using namespace std;
     8 using namespace cv;
     9 int main()
    10 {
    11     Mat img(3, 4, CV_64FC2, Scalar_<double>(12.625,3.141592653));
    12     //Mat_(Vec)
    13     cout<<img<<endl;
    14     cout<<endl;
    15     /*cout << "dims:" << img.dims << endl;   
    16     cout << "rows:" << img.rows << endl;   
    17     cout << "cols:" << img.cols << endl;   
    18     cout << "channels:" << img.channels() << endl;
    19     
    20     cout << "elemSize:" << img.elemSize() << endl;  
    21     cout << "elemSize1:" << img.elemSize1() << endl;*/
    22 
    23 
    24     //元素的遍历:
    25     for(int row = 0; row < img.rows; row++)
    26     {
    27         for(int col = 0;col < img.cols; col++)
    28         {
    29             cout<<img.at<Vec2d>(row,col)[0]<<" "<<img.at<Vec2d>(row,col)[1]<<"	";
    30         }
    31         cout<<endl;
    32     }
    33 
    34 
    35     system("pause");
    36     return 0;
    37 }

    备注3:创建图像Mat时候,注意点同上~

    备注4:使用at时img.at<**>(row,col)的**处对应选项~

    typedef Vec<uchar, 2> Vec2b;
    typedef Vec<uchar, 3> Vec3b;
    typedef Vec<uchar, 4> Vec4b;
    
    typedef Vec<short, 2> Vec2s;
    typedef Vec<short, 3> Vec3s;
    typedef Vec<short, 4> Vec4s;
    
    typedef Vec<ushort, 2> Vec2w;
    typedef Vec<ushort, 3> Vec3w;
    typedef Vec<ushort, 4> Vec4w;
    
    typedef Vec<int, 2> Vec2i;
    typedef Vec<int, 3> Vec3i;
    typedef Vec<int, 4> Vec4i;
    typedef Vec<int, 6> Vec6i;
    typedef Vec<int, 8> Vec8i;
    
    typedef Vec<float, 2> Vec2f;
    typedef Vec<float, 3> Vec3f;
    typedef Vec<float, 4> Vec4f;
    typedef Vec<float, 6> Vec6f;
    
    typedef Vec<double, 2> Vec2d;
    typedef Vec<double, 3> Vec3d;
    typedef Vec<double, 4> Vec4d;
    typedef Vec<double, 6> Vec6d;

     题外话:

    我一次Mat img(3,4,CV8S,~)....而访问时候,用的img.at<int>(i,j)出现访存错误,我的本意是用CV32S,不对应就会出现访存错误。。。

  • 相关阅读:
    PowerDesigner将PDM导出生成WORD文档
    哨兵机制
    redis 主从数据同步
    redis RDB
    redis AOF机制
    redis数据结构
    dependencyManagement 和 dependencies的区别
    同源策略 跨域资源共享
    高可用 可扩展 多层反向代理架构演进
    String 杂记
  • 原文地址:https://www.cnblogs.com/LzKlyhPorter/p/4610247.html
Copyright © 2020-2023  润新知