• <Vec3b>


    转自:http://blog.csdn.net/qq_29540745/article/details/52517269

    一、What is vector?

           vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.
    用法:
    1.文件包含:     
               首先在程序开头处加上#include<vector>以包含所需要的类文件vector,还有一定要加上using namespace std;

    2.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除。

    比如Vec<uchar, 3>:
    其实这句就是定义一个uchar类型的数组,长度为3而已,例如 8U 类型的 RGB 彩色图像可以使用 <Vec3b>,3 通道 float 类型的矩阵可以使用 <Vec3f>。对于 Vec 对象,可以使用[]符号如操作数组般读写其元素,如:Vec3b color; //用 color 变量描述一种 RGB 颜色
    color[0]=255; //0通道的B 分量
    color[1]=0; //1通道的G 分量
    color[2]=0; //2通道的R 分量

    二、How do we use it ?

    vv

    先扩展一下访问像素的 .at 的用法:

         cv::mat的成员函数: .at(int y, int x)可以用来存取图像中对应坐标为(x,y)的元素坐标。但是在使用它时要注意,在编译期必须要已知图像的数据类型,这是因为cv::mat可以存放任意数据类型的元素。因此at方法的实现是用模板函数来实现的。假设提前已知一幅图像img的数据类型为 unsigned char型灰度图(单通道),要对坐标为(14,25)的像素重新赋值为25,则对应操作如下:

    [cpp] view plain copy
     
    1. srcImage.at<uchar>(14,25) = 25;  

         如果要操作的图片img是一幅数据类型同样为unsigned char的彩色图片,再次要求将坐标(14,25)的像素赋值为25。这个操作跟上面的就有点区别了,需要对这个像素三个通道的每个对应元素赋值,Opencv中图像三原色在内存中的排列顺序为B-G-R(见下面注释),操作过程如下:

    [cpp] view plain copy
     
    1. img.at<Vec3b>(14,25) [0]= 25;//B    
    2. img.at< Vec3b >(14,25) [1]= 25;//G    
    3. img.at< Vec3b >(14,25 [2]= 25;//R    

    一个简单小程序:

    [cpp] view plain copy
     
    1. #include <opencv2/opencv.hpp>  
    2. #include <iostream>  
    3. using namespace cv;  
    4. using namespace std;  
    5. int main()  
    6. {  
    7.     Mat m(3, 3, CV_8UC3);//建立一个三行三列3通道像素  
    8.     Vec3b p;  
    9.     for (int i = 0; i < 3; i++)  
    10.     {  
    11.         for (int j = 0; j < 3; j++)  
    12.         {  
    13.             p[0] = i;  
    14.             p[1] = j;  
    15.             p[2] = i+j;  
    16.             m.at<Vec3b>(i,j) = p;  
    17.         }  
    18.     }  
    19.     cout <<"数组:"<<endl<<"M= " << m << endl;  
    20.     int a = m.at<Vec3b>(2, 2)[2];  
    21.     Vec3b b = m.at<Vec3b>(2, 2)[2];  
    22.     cout << "访问一个数:" << a <<endl<<"访问三通道:"<<b<<endl;  
    23.     waitKey(0);  
    24.     return 0;  
    25. }  


    结果:

  • 相关阅读:
    《Android深度探索HAL与驱动开发》第一章阅读心得
    《Android深度探索HAL与驱动开发》第二章阅读心得
    《Android深度探索HAL与驱动开发》第三章阅读心得
    第五章 搭建S3C6410开发板测试环境
    IOS 拾取器控件
    原生js实现jquery的getJSON方法
    css reset
    css3特效
    HTML5 有哪些特质
    css rest
  • 原文地址:https://www.cnblogs.com/wuxiaotianC/p/6661589.html
Copyright © 2020-2023  润新知