Skip to content

Instantly share code, notes, and snippets.

@seaside2mm
Last active November 12, 2022 06:30
Show Gist options
  • Save seaside2mm/1e4a3234b361b92477bc6b984e5556cc to your computer and use it in GitHub Desktop.
Save seaside2mm/1e4a3234b361b92477bc6b984e5556cc to your computer and use it in GitHub Desktop.
[opencv] #cv

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)

Mat::data指针

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;
    }
}

CUDA

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment