你知道如何从摄像头获取的原始图像YUY2使用的OpenCV-的DirectShow(无VFW)?
http://opencv.willowgarage.com/wiki/CameraCapture :我成功使用的例子越来越IPL图像(英特尔处理库图像)。
使用功能cvShowImage()中的代码,图像在屏幕上好看。 但我不希望在屏幕上显示的图像,也没有IPL格式,我只想YUYV原始数据...
wiki页面的第二部分将是我想要的,但deviceSetupWithSubtype()似乎并没有任何不复存在OpenCV中2.4(甚至谷歌不知道)。
编辑:我发现:它在网页上链接的rar文件! 谷歌不“看”在RAR文件。 这里是链接: http://opencv.willowgarage.com/wiki/CameraCapture?action=AttachFile&do=get&target=Camera+property+Settings.rar 。 我要学习这一点。
如果任何人碰到这个绊倒:
ffmpeg的有窗户良好的API,允许原始YUV图像捕捉。 无论是CLI:
ffmpeg.exe -f dshow -i video="your-webcam" -vframes 1 test.yuv
或者它们的C API:
AVFormatContext *camera = NULL;
AVPacket packet;
avdevice_register_all();
AVInputFormat *inFrmt = av_find_input_format("dshow");
int ret = avformat_open_input(&camera, "video=your-webcam", inFrmt, NULL);
av_init_packet(&packet);
while (int ret = av_read_frame(camera, &packet) >= 0) {
// packet.data has raw image data
}
通常情况下,OpenCV的使用DirectShow得到的摄像头RGB帧窗口。 OpenCV的VideoCapture类获得CV_CAP_PROP_CONVERT_RGB属性(布尔标志,用于指示是否图像shoule转换为RGB),但它不是在我所有的摄像头工作。
而不是写DirectShow的代码,使自己的样品采集和回调以获取YUY2数据desribe的位置 (他们HAVA作了精彩的工具,以简化DirectShow开发。)我修改CameraDs和( 安装文件 )类(网页在中国)得到YUY2数据。
在CameraDs.cpp改变mt.subtype = MEDIASUBTYPE_RGB24;
到mt.subtype = MEDIASUBTYPE_YUY2;
(请检查您的网络是否支持它)。
和使一个2信道YUY2图像而不是RGB 3通道。
m_pFrame = cvCreateImage(cvSize(m_nWidth, m_nHeight), IPL_DEPTH_8U, 2);
内外得到YUY2数据,并将其与OpenCV的界面就像改为RGB:
{
//query frame
IplImage * pFrame = camera. QueryFrame();
//change them to rgb
Mat yuv (480, 640,CV_8UC2 ,pFrame-> imageData);
Mat rgb (480, 640,CV_8UC3 );
cvtColor(yuv ,rgb, CV_YUV2BGRA_YUY2);
//show image
//cvShowImage("camera", rgb);
imshow("camera" ,rgb);
if ( cvWaitKey(20 ) == 'q')
break;
}