我试图使用OpenCV从网络摄像头抓取帧并使用SFML在窗口中显示它们.
VideoCapture以OpenCV的Mat格式返回帧.为了显示帧,SFML需要uint8格式的一维像素阵列,据我所知,它可与uchar互换.预计该阵列表示每像素RGBA 32位.
所以,我有一个uchar数组,我循环Mat数据并复制每个像素:
VideoCapture cap(0);
Mat frame;
cap >> frame;
uchar* camData = new uchar[640*480*4];
uchar* pixelPtr = frame.data;
for(int i = 0; i < frame.rows; i++)
{
for(int j = 0; j < frame.cols; j++)
{
camData[i*frame.cols + j + 2] = pixelPtr[i*frame.cols + j + 0]; // B
camData[i*frame.cols + j + 1] = pixelPtr[i*frame.cols + j + 1]; // G
camData[i*frame.cols + j + 0] = pixelPtr[i*frame.cols + j + 2]; // R
camData[i*frame.cols + j …Run Code Online (Sandbox Code Playgroud)