最近几天用opencv采集视频、读取AVI,发现了一个bug,源程序为cv中的sample,如下:
void ShowAVIVideo(char* filename, HWND hwnd, int width, int height)
{
cvcamAVIFILE f = cvcamAVIOpenFile(filename);
if( (int)f <> 1 )
{
cvNamedWindow("avi window", CV_WINDOW_AUTOSIZE);
ShowAVIVideo( argv[1], (HWND)cvGetWindowHandle("avi window"), 320, 240);
}
}
其中在cvcamAVISetWindow等操作中会有出错,追踪一下源代码,发现是库中的一个不一致造成的。在cvcamavi.cpp中定义了#define AVIS_START 1000,可能是为了今后的扩展之用.
cvcamAVIOpenFile中调用了cvcamAVIs::AddSource,其中返回的是i,此次应该返回i+AVIS_START, 因为cvcamAVIs::operator[]中有source -= AVIS_START操作。
另一个问题是opencv的cvSaveImage保存的pgm为ascii格式,有时这可能是不需要的,修改方法为:找到highgui\grfmt_pxm.cpp中的GrFmtPxMWriter::WriteImage函数,将
bool isBinary = false;
改为bool isBinary = true,重新编译即可
顺便看看一些相应的代码,发现opencv的代码结构写得还是很不错的,比如文件读写便使用了factory patten,毕竟intel有的是写程序的高人,opencv的几个维护人也是资深的程序员。
07.05.30
add white balance control to opencv
sometimes it's rather boring when there is not white balance control interface in opencv. so i modified highgui.h and cvcap_v4l.cpp and added balance control according to v4l2 api's document. Also, blue/red balance controls are available, but it didn't work for me, curisous !
没有评论:
发表评论