工作原因,需要用C调用OpenCV,在视频画面上画线。经过一番折腾,确实把线画出来了。也许有人需要,这里就发出来。
从视频得到一个缓冲区(RGBA),然后绘制一个斜线。其他的数据源、绘制要求,也很容易了。
#include <imgproc/imgproc_c.h> #include <highgui/highgui_c.h> #include <core/core_c.h> //注意opencv要求格式为gbr,会导致红蓝颠倒 int gh_trace_draw_track(FrameData* pFrame) { CvPoint p1; CvPoint p2; CvScalar color; CvSize size; if (!(pFrame->buffer.data)) { return 0; } size.width = pFrame->size2d.width; size.height= pFrame->size2d.height; //根据不同格式,使用对应的大小 IplImage* iplImage = cvCreateImageHeader(size, IPL_DEPTH_8U, SIZE_ARGB); cvSetData(iplImage, pFrame->buffer.data, size.width*SIZE_ARGB); p1.x = 0; p1.y = 0; p2.x = size.width; p2.y = size.height; color.val[0] = 0xFF; color.val[1] = 0; color.val[2] = 0xFF; color.val[3] = 0; // 可以用cvPoint(x1,y1)的写法 cvLine(iplImage, p1, p2, color, 1, 8, 0); return 0; }
画矩形
cvRectangle(iplImage, cvPoint(x1,y1), cvPoint(x2,y2), color, CV_FILLED, 8, 0);