static void draw_face_boxes(dl_matrix3du_t *image_matrix, box_array_t *boxes, int face_id){ int x, y, w, h, i; uint32_t color = FACE_COLOR_YELLOW; if(face_id < 0){ color = FACE_COLOR_RED; } else if(face_id > 0){ color = FACE_COLOR_GREEN; } fb_data_t fb; fb.width = image_matrix->w; fb.height = image_matrix->h; fb.data = image_matrix->item; fb.bytes_per_pixel = 3; fb.format = FB_BGR888; for (i = 0; i < boxes->len; i++){ // rectangle box x = (int)boxes->box[i].box_p[0]; y = (int)boxes->box[i].box_p[1]; w = (int)boxes->box[i].box_p[2] - x + 1; h = (int)boxes->box[i].box_p[3] - y + 1; fb_gfx_drawFastHLine(&fb, x, y, w, color); fb_gfx_drawFastHLine(&fb, x, y+h-1, w, color); fb_gfx_drawFastVLine(&fb, x, y, h, color); fb_gfx_drawFastVLine(&fb, x+w-1, y, h, color); #if 0 // landmark int x0, y0, j; for (j = 0; j < 10; j+=2) { x0 = (int)boxes->landmark[i].landmark_p[j]; y0 = (int)boxes->landmark[i].landmark_p[j+1]; fb_gfx_fillRect(&fb, x0, y0, 3, 3, color); } #endif } }
时间: 2023-07-16 22:12:14 浏览: 80
这段代码是用于在图像中绘制人脸框和关键点的函数。它接收一个指向图像矩阵和人脸框数组的指针,以及一个人脸 ID。
首先,它根据人脸 ID 的值确定要绘制的人脸框的颜色。如果人脸 ID 为负数,表示没有检测到人脸,那么人脸框的颜色为红色;如果人脸 ID 为正数,表示检测到了人脸,那么人脸框的颜色为绿色;否则人脸框的颜色为黄色。
然后,它创建一个 fb_data_t 结构体,用于将图像矩阵的信息传递给图形库。接下来,它遍历人脸框数组,并使用 fb_gfx_drawFastHLine、fb_gfx_drawFastVLine 和 fb_gfx_fillRect 函数在图像中绘制人脸框和关键点。
需要注意的是,本代码中的 #if 0 表示该部分代码被注释掉了,如果需要绘制关键点,则需要将其改为 #if 1。
阅读全文