西语网站域名,百度指数做网站,网站建设的技巧有哪些,哪个商城网站建设好一、结构解释IplImage数据结构体中有两个宽度#xff1a;1 是width属性#xff0c;表示图像的每行像素数#xff1b;2 是widthStep属性#xff0c;表示存储一行像素需要的字节数。在OpenCV里边#xff0c;widthStep必须是4的倍数#xff0c;从而实现字节对齐#xff0c;…一、结构解释IplImage数据结构体中有两个宽度1 是width属性表示图像的每行像素数2 是widthStep属性表示存储一行像素需要的字节数。在OpenCV里边widthStep必须是4的倍数从而实现字节对齐有利于提高运算速度。所以widthStep不等于width*nChannels。三通道字节图像中imageData排列如下其中BGR分别为每个像素的三个通道值。举例如果单通道图像宽度为3由于不是4的整数倍所以加一个字节补齐则widthStep是4。即这个图像的一行需要4个字节只使用前3个最后一个空着。也就是一个宽3高3的图像的imageData数据大小为4*312字节。注意在不知道imageData是四字节对齐的情况下直接读取会造成错位。空着的那个像素并不是无效的它仍然可以被操作。
二、去掉补齐位正常读取unsigned char* colors1 (unsigned char*)input-imageData;unsigned char* colors2 (unsigned char*)test-imageData;//字节对齐int widths input-width; //每行像素个数int heights input-height; int widthSteps input-widthStep; //存储一行像素需要的字节数int cn input-nChannels;unsigned char* color1 (unsigned char*)malloc(3* widths * heights *sizeof(unsigned char));unsigned char* color2 (unsigned char*)malloc(3* widths * heights *sizeof(unsigned char));for (int i 0; i heights; i)for (int j 0; j widths; j){for (int k 0; k cn; k){color1[i*widths*cn cn*j k] colors1[i*widthSteps j*cn k];color2[i*widths*cn cn*j k] colors2[i*widthSteps j*cn k];}}理解i*widthSteps j*cn k中i*widthSteps计算前几行的字节数j*cn计算当前行已经占有的字节数再加上1 2 3.i*widths*cn cn*j k中 i*widths*cn是计算前几行占有的字节数j*cn计算当前行已经占有的字节数再加上1 2 3.