C++ 使用opencv保存libvlc图像

C++ 使用opencv保存libvlc图像,c++,opencv,libvlc,C++,Opencv,Libvlc,我喜欢从libvlc媒体的视频流图像创建cv:Mat对象图像 sprintf( width, ":vmem-width=%i",VIDEOWIDTH); sprintf( height,":vmem-height=%i",VIDEOHEIGHT); sprintf( chroma,":vmem-chroma=%s","RV32"); sprintf( pitch, ":vmem-pitch=%i",VIDEOWIDTH * 4); libvlc_media_add_option(Media,wi

我喜欢从libvlc媒体的视频流图像创建cv:Mat对象图像

sprintf( width, ":vmem-width=%i",VIDEOWIDTH);
sprintf( height,":vmem-height=%i",VIDEOHEIGHT);
sprintf( chroma,":vmem-chroma=%s","RV32");
sprintf( pitch, ":vmem-pitch=%i",VIDEOWIDTH * 4);
libvlc_media_add_option(Media,width);
libvlc_media_add_option(Media,height);
libvlc_media_add_option(Media,chroma);
libvlc_media_add_option(Media,pitch);
libvlc_video_set_callbacks(MediaPlayer,lock,unlock,display,NULL);
…和

void * MainHandler::lock(void *data, void **p_pixels){ 
  *p_pixels = (void *)pic;
  return NULL;
} 

void MainHandler::display(void *data, void *id){
   cv::Mat image(VIDEOHEIGHT,VIDEOWIDTH,CV_8UC3,pic);
    ....
}
这其中的问题显然是CV_8UC3,因为色度=RV32创建32位RGB图像。 但是什么是正确的类型呢?
我看不到这样的东西:

hmmm,你应该在这里查看样本,而不是仅仅链接:-/…如果是RV32,请尝试CV_8UC4。或者用另一种方法,保留CV_8UC3,并为Pitch指定RV24和VIDEOWIDTH*3谢谢你Berak花时间。我试过你写的,但我有同样的结果。图像如下所示:另一方面,函数libvlc_video_take_snapshotMediaPlayer,0,aaa/,0,0可以毫无问题地保存图像。