我想在YUV420P帧上使用以下函数绘制一个红色矩形。下面的代码会改变帧并且我能看到两条黑线(顶部和底部)保持黑点分散。有什么建议吗?
void draw_rectangle(uint8_t *frame, int x, int y,
int width, int height,
int img_width, int img_height)
{
cv::Mat frame_yuv;
int size[2];
Point pt1, pt2;
cv::Scalar color = Scalar(255, 0, 0);
size[0] = img_width + img_width/2;
size[1] = img_height;
frame_yuv = cv::Mat(2, size, CV_8UC1, frame);
pt1.x = x;
pt1.y = y;
pt2.x = x + width;
pt2.y = y + height;
rectangle(frame_yuv, pt1, pt2, Scalar(0, 0, 255));
}
frame_yuv = cv::Mat(2, size, CV_8UC1, frame);
,正如你所提到的,frame
是YUV格式,这意味着它是一个3通道矩阵,但你正在使用CV_8UC1
,它只代表单通道矩阵,将其更改为CV_8UC3
可能会有所帮助。在绘制矩形之前,请确保能够正确地将uint8_t *frame
转换为cv::Mat
。 - ZdaR