因为项目中的需要,本篇博文实现输出(保存)yolo的测试结果,并测试结果的坐标位置切割原图,并不需要知道每个框的类别,保存了top9。
主要对src/image.c文件中的draw_detections函数做了修改。
//添加了 char *filename ,为了得到当前的图片名。
void draw_detections(image im, int num, float thresh, box *boxes, float **probs, float **masks, char **names, image **alphabet, int classes, char *filename)
{
printf("num %d\n", num);
float rawmax[num];
int i,j;
int params[3];
char savePath[100] = "";
//为了得到top19的框,将每个框按照最大概率值进行了排序,取了top19. b,c矩阵都是为了得到top9对应的原框的下标,好得到坐标点。
for(i =0; i<num; i++){
rawmax[i] = probs[i][0];
for(j =0;j<classes;j++){
if(probs[i][j] > rawmax[i]){
rawmax[i] = probs[i][j]; }
}
}
for( i =0;i<num;i++){
if(rawmax[i] > 0)
printf("rawmax[ %d]:%f\n",i,rawmax[i]);
}
float b[num];
int c[num];
for(i =0; i<num; c[i]= 1+ i++){
b[i] = rawmax[i];
}
int x;
for(i =0;i<num;i++){
for(x = i,j = x+1; j<num;j++)
if(b[x]<b[j]) x = j;
if(x!=j){
j= b[i];
b[i] = b[x];
b[x] = j;
j = c[i];
c[i] = c[x];
c[x] = j;
}
}
//输出top9的坐标,后面的代码注释掉了,因为我只需要根据坐标切割出子