工作原因,需要用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);