官方网站建设的四个步骤,北京东城区 网站建设,外贸推广主要做什么,做网站专业的公司灰度图#xff1a;2维矩阵
彩色图#xff1a;3维矩阵
ps#xff1a;目前大部分设备都是用无符号 8 位整数#xff08;类型为 CV_8U#xff09;表示像素亮度
Mat类定义#xff1a;
class CV_EXPORTS Mat
{
public://一系列函数.../* flag 参数中包含许多关于矩阵的信息…灰度图2维矩阵
彩色图3维矩阵
ps目前大部分设备都是用无符号 8 位整数类型为 CV_8U表示像素亮度
Mat类定义
class CV_EXPORTS Mat
{
public://一系列函数.../* flag 参数中包含许多关于矩阵的信息如-Mat 的标识-数据是否连续-深度-通道数目*/int flags;//矩阵的维数取值应该大于或等于 2int dims;//矩阵的行数和列数如果矩阵超过 2 维这两个变量的值都为-1int rows, cols;//指向数据的指针uchar* data;//指向引用计数的指针//如果数据是由用户分配的则为 NULLint* refcount;//其他成员变量和成员函数...
};
单通道图像元素类型一般为 8U即 8 位无符号整数也可以是 16S、32F 等这些类型可以直接用 uchar、short、float 等 C/C语言中的基本数据类型表达
多通道图像如RGB彩色图像需要用三个通道来表示。在这种情况 下如果依然将图像视作一个二维矩阵那么矩阵的元素不再是基本的数据类型。可以采用Vec类表示一个向量。如8U类型的RGB彩色图像使用Vec3b。
对于 Vec 对象可以使用[]符号如操作数组般读写其元素如
Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0]255; //B 分量
color[1]0; //G 分量
color[2]0; //R 分量
at()函数实现读取矩阵中的某个像素或者对某个像素进行赋值操作。
uchar value grayim.atuchar(i,j);//读出第 i 行第 j 列像素值
grayim.atuchar(i,j)128; //将第 i 行第 j 列像素值设置为 128
对图像进行遍历分别对单通道的 grayim 以及 3 个通道的 colorim然后对两个图像的所有像素值 进行赋值最后现实结果
Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素并设置像素值for( int i 0; i grayim.rows; i)for( int j 0; j grayim.cols; j )grayim.atuchar(i,j) (ij)%255;//遍历所有像素并设置像素值for( int i 0; i colorim.rows; i)for( int j 0; j colorim.cols; j ){Vec3b pixel;pixel[0] i%255; //Bluepixel[1] j%255; //Greenpixel[2] 0; //Redcolorim.atVec3b(i,j) pixel;}//显示结果imshow(grayim, grayim);imshow(colorim, colorim);waitKey(0);
使用迭代器遍历
Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素并设置像素值MatIterator_uchar grayit, grayend;for( grayit grayim.beginuchar(), grayend
grayim.enduchar(); grayit ! grayend; grayit)*grayit rand()%255;//遍历所有像素并设置像素值MatIterator_Vec3b colorit, colorend;for( colorit colorim.beginVec3b(), colorend
colorim.endVec3b(); colorit ! colorend; colorit){(*colorit)[0] rand()%255; //Blue(*colorit)[1] rand()%255; //Green(*colorit)[2] rand()%255; //Red}//显示结果
采用指针
Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素并设置像素值for( int i 0; i grayim.rows; i){//获取第 i 行首像素指针uchar * p grayim.ptruchar(i);//对第 i 行的每个像素(byte)操作for( int j 0; j grayim.cols; j )p[j] (ij)%255;}//遍历所有像素并设置像素值for( int i 0; i colorim.rows; i){//获取第 i 行首像素指针Vec3b * p colorim.ptrVec3b(i);for( int j 0; j colorim.cols; j ){p[j][0] i%255; //Bluep[j][1] j%255; //Greenp[j][2] 0; //Red}}//显示结果