TYPE CV_8U: 8-bit unsigned integer (uchar) CV_8S: 8-bit signed integer (schar) CV_16U: 16-bit unsigned integer (ushort) CV_16S; 16-bit signed integer (short) CV_32S: 32-bit signed integer (int) CV_32F: 32-bit floating-point number (float) CV_64F: 64-bit floating-point number (double)
BGR三通道图片来说默认是uchar*
类型,用的时候可以用强制类型转换成需要的类型,比如uchar3*
// 创建一个uchar* 类型的指针 uchar* imagePtr,那么分给imagePtr的空间应该等于image所占用的空间
uchar* imagePtr = (uchar*)malloc(sizeof(uchar) * height * width * 3);//imagePtr是一个超长数组
imagePtr[(i * width + j) * 3 + 0] = image.at<cv::Vec3b>(i,j)[0];
imagePtr[(i * width + j) * 3 + 1] = image.at<cv::Vec3b>(i,j)[1];
imagePtr[(i * width + j) * 3 + 2] = image.at<cv::Vec3b>(i,j)[2];
// 或者使用cv::Mat::ptr指针取值赋给imagePtr数组
for(int i = 0; i < height; i++)
{
//假设cv::Mat image 是一个cv::Vec3b类型的图片
uchar3* ptr = image.ptr<cv::Vec3b>(i);//创建指针是要注意指针类型要与图片类型对应
for(int j = 0; j < width; j++)
{
imagePtr[(i * width + j) * 3 + 0] = ptr[j].x;
imagePtr[(i * width + j) * 3 + 1] = ptr[j].y;
imagePtr[(i * width + j) * 3 + 2] = ptr[j].z;
}
}