首页 > 其他分享 >Opencv 中 Mat中元素的值读取方法总结

Opencv 中 Mat中元素的值读取方法总结

时间:2023-09-24 09:55:25浏览次数:40  
标签:Mat nrow ++ cols Opencv ncol size 读取

1、利用 at 函数读取

(1)单通道图像读取方式

Mat img1 = imread(filename,IMREAD_GRAYSCALE);  
   for( size_t nrow = 0; nrow < img1.rows; nrow++)  
   {  
       for(size_t ncol = 0; ncol < img1.cols; ncol++)  
       {  
           uchar val = mat_CV_8UC1.at<uchar>(nrow,ncol);      
       }  
   }  

(2) 三通道图像读取方式

Mat img2 = imread(filename,IMREAD_COLOR);  
   for( size_t nrow = 0; nrow < img2.rows; nrow++)  
    {  
       for(size_t ncol = 0; ncol < img2.cols; ncol++)  
       {  
           Vec3i bgr = mat_CV_8UC3.at<Vec3b>(nrow,ncol);//用Vec3b也行  
           cout   << "("<<bgr.val[0]<<","  
                   <<bgr.val[1]<<","  
                   <<bgr.val[2]<<")";  
       }  
       cout << endl;  
    }  

2、使用指针读取

for( size_t nrow = 0; nrow < img3.rows; nrow++)  
    {  
        uchar* data = img3.ptr<uchar>(nrow);  
       for(size_t ncol = 0; ncol < img3.cols * img3.channels(); ncol++)  
       {  
            cout << int( data[ncol] ) ;  
       }  
       cout << endl;  
    }  

3、使用迭代器

Mat img4 = imread(filename,IMREAD_GRAYSCALE);
MatIterator_<uchar> it = img4.begin<uchar>(), it_end = img4.end<uchar>();  
   for(int cnt = 1; it != it_end; ++it)  
    {  
        cout << ( int(*it) ) ;  
        if( (cnt++ % img4.cols) ==0 )  
            cout << endl;       
    }  

4、使用矩阵元素的地址定位知识

Mat img5(rows, cols,CV_8U, Scalar(0));
for( size_t nrow = 0; nrow < img5.rows; nrow++)  
for(size_t ncol = 0; ncol < img5.cols; ncol++)
    {  
       cout<<(int)(*(img5.data+img5.step[0]*nrow+img5.step[1]*ncol));
    }  
5、补充:在使用 at 函数的情况下需要预先知道Mat变量中存储的元素类型,如果类型不匹配就会出现读错误。所以可以采用c++  boost库中的BOOST_TYPEOF来获取图像的元素数据类型。例:
Mat img6 = imread(filename);
typedef BOOST_TYPEOF(*img6.data) ElementType
for( size_t nrow = 0; nrow < img1.rows; nrow++)  
   {  
       for(size_t ncol = 0; ncol < img1.cols; ncol++)  
       {  
        cout<<mat_CV_8UC1.at<ElementType>(nrow,ncol);      
       }  
   }   

 

翻译

搜索

复制

标签:Mat,nrow,++,cols,Opencv,ncol,size,读取
From: https://www.cnblogs.com/rainbow70626/p/17725623.html

相关文章

  • 基于Yolov2深度学习网络的车辆检测算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述        车辆检测是计算机视觉领域中的一个重要问题。它在自动驾驶、智能交通系统、交通监控以及车辆计数等应用场景中起着至关重要的作用。近年来,深度学习在图像识别领域取得了显著的......
  • 问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
    解决:Opencv(3.1.0/3.4/4.1.0)找不到/opencv2/gpu/gpu.hpp问题环境:系统:Win10环境:Opencv3.4.0/4.1.0显卡:1080ti问题Windows下使用opencv3.4.0/4.1.0调用包含GPU模块函数getCudaEnabledDeviceCount()的示例时提示找不到/opencv2/gpu/gpu.hpp。解决方式替换代码中引用的”......
  • 【matplotlib基础】--3D图形
    matplotlib在1.0版本之前其实是不支持3D图形绘制的。后来的版本中,matplotlib加入了3D图形的支持,不仅仅是为了使数据的展示更加生动和有趣。更重要的是,由于多了一个维度,扩展了其展示数据分布和关系的能力,可以一次从三个维度来比较数据。下面介绍在matplotlib中绘制各类3D图形的......
  • avformat_network_init()解析备忘
    基于ffmpeg-6.0.avformat_network_init()函数定义如下:intavformat_network_init(void){#ifCONFIG_NETWORKintret;if((ret=ff_network_init())<0)returnret;if((ret=ff_tls_init())<0)returnret;#endifreturn0;}可以......
  • opencv 基于形状的模板匹配
    1.问题或需求描述opencv基于形状的模板匹配测试2.解决方法或原理:主要步骤:使用opencv查找轮廓(findContours)匹配轮廓(形状)(matchShapes)的相似度python代码:importcv2#读取目标图像target_image=cv2.imread('target.png',cv2.IMREAD_COLOR)#读取模板图像template_image......
  • 【刷题笔记】59. Spiral Matrix II
    题目Givenapositiveinteger n,generateasquarematrixfilledwithelementsfrom1to n2 inspiralorder.Example:Input:3Output:[[1,2,3],[8,9,4],[7,6,5]]题目大意给定一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺......
  • ubuntu20安装opencv3.4.9 多版本
    1下载源码下载源码https://github.com/opencv/opencv/releases/tag/3.4.9  下载扩展源码 https://github.com/opencv/opencv_contrib/releases/tag/3.4.9 2安装依赖sudoapt-getupdatesudoapt-getinstall-ybuild-essentialcmakegitlibgtk2.0-devpkg-......
  • [CF1229E]Marek and Matching
    Thisisaharderversionoftheproblem.Inthisversion,\(n\le7\).Marekisworkinghardoncreatingstrongtestcasestohisnewalgorithmicproblem.Doyouwanttoknowwhatitis?Nah,we'renottellingyou.However,wecantellyouhowheg......
  • (五)Unity性能优化-Animation导入设置检查与优化
    原链接:https://github.com/lwwhb/Unity2022_SUNTAIL_Stylized_Fantasy_Village_OptimizationRig标签页AnimationTypeNone无动画Legacy旧版动画,不要用Generic通用骨骼框架Humanoid人形骨骼框架选择原则:无动画选择None非人形动画选择Generic人形动画人形动画需要Kinematic......
  • math 库中常用的数学运算和常量【GO 基础】
    〇、关于mathGO语言的math库是一个内置的标准库,其中包含了许多数学函数和常量,用于计算各种数学运算和统计学计算。日常开发中,计算当然是少不了的,那么今天来梳理下备查。一、测试示例1.1小数位的:Round-四舍五入、RoundToEven-四舍/五至偶数funcRound(xfloat64)float6......