当前位置: 首页 > 工具软件 > cv4j > 使用案例 >

CV_8UC1,CV_8UC2,CV_8UC3 Vec2b Vec3b Vec4b 含义

龚安民
2023-12-01

在OpenCv中,使用Mat存图像,有专门的数据类型
一般的图像文件格式使用的是 Unsigned 8bits吧,CvMat矩阵对应的参数类型就是
CV_8UC1,CV_8UC2,CV_8UC3。 其中 U代表 Unsigned 无符号、C代表CvMat 后面的数字代表通道数
(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)

 

而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3...
double是64bits,对应CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3等。

 

7.OpenCV 源代码中的定义:
typedef Vec <uchar, 2> Vec2b;
Vec2b—表示每个Vec2b对象中,可以存储2个char(字符型)数据
Vec3b—表示每一个Vec3b对象中,可以存储3个char(字符型)数据,比如可以用这样的对象,去存储RGB图像中的
Vec4b—表示每一个Vec4b对象中,可以存储4个字符型数据,可以用这样的类对象去存储—4通道RGB+Alpha的图


遍历方法就是 用 at 其中现需要 把模板类T 变成Vec4b

for (int i = 0; i < img.rows; i++) {
		for (int j = 0; j < img.cols; j++) {
			//Mat::at()取值或改变某点的像素值比较耗时,可以采用Mat的模板子类Mat_<T>
			//Mat类中的at方法作用:用于获取图像矩阵某点的值或改变某点的值。
			double temp = img.at<Vec4b>(i, j)[3] / 255.0;
			mat.at<Vec4b>(i, j)[0] = (1 - temp)*back_img.at<Vec4b>(i, j)[0] + temp *img.at<Vec4b>(i, j)[0];
			mat.at<Vec4b>(i, j)[1] = (1 - temp)*back_img.at<Vec4b>(i, j)[1] + temp *img.at<Vec4b>(i, j)[1];
			mat.at<Vec4b>(i, j)[2] = (1 - temp)*back_img.at<Vec4b>(i, j)[2] + temp *img.at<Vec4b>(i, j)[2];
			mat.at<Vec4b>(i, j)[3] = (1 - temp)*back_img.at<Vec4b>(i, j)[3] + temp *img.at<Vec4b>(i, j)[3];
		}
	}

 

 类似资料: