python+opencv 绘制检测框

1、利用cv2.rectangle()绘制bounding box

import cv2

cv2.rectangle(img, (x,y), (x+w,y+h), (B,G,R), Thickness)

 参数如下:

img:图像

 (x,y):bounding box左上角点坐标,图像最左上角坐标为(0,0)

(x+w,y+h):bounding box右下角点坐标

 (B,G,R):颜色

Thickness:粗细

2、示例

import cv2
imgname = '001.jpg'
img = cv2.imread(imgname)
# 画矩形框
cv2.rectangle(img, (212,317), (290,436), (0,255,0), 4)
# 显示图像
cv2.imshow('show', img)
#一定要加这一句,否则图片会一闪而过
cv2.waitKey(0)

3、附加:读取groundtruth和检测结果文件,并绘制在同一图片上的代码 

import cv2
gdfile = 'dataset/1/test.txt'
dtfile = 'result/box.txt'
imagefile = 'result/constant/yi'

with open(gdfile) as gddata, open(dtfile) as dtdata:
    gdlines = gddata.readlines()
    dtlines = dtdata.readlines()
    font = cv2.FONT_HERSHEY_SIMPLEX  # 定义字体
    for i in range(len(gdlines)):
        imagepath = gdlines[i].split(' ')[0]
        img = cv2.imread(imagepath)
        try:
            gdlines[i][19:37] != dtlines[i][1:19]
        except:
            print('file name error')
            break
        bbox = gdlines[i].split(' ')[1:]
        for j in bbox:
            if len(j)>2:
                pos = j.split(',')
                cv2.rectangle(img, (int(pos[0]), int(pos[1])), (int(pos[2]), int(pos[3])), (255, 0, 0), 4)
        bbox = dtlines[i][19:].translate(str.maketrans('', '', ' \'')).split('[')
        for j in bbox:
            if len(j)>2:
                pos = j.translate(str.maketrans('', '', ']')).split(',')
                cv2.rectangle(img, (int(pos[1]), int(pos[2])), (int(pos[3]), int(pos[4])), (0, 255, 0), 4)
                cv2.putText(img, pos[0], (int(pos[1]), int(pos[2])), font, 1, (0, 255, 0), 1)
        cv2.imwrite(imagefile+'/'+gdlines[i][19:37], img)

 box.txt文件:

/train_img_0002.jpg ['0.59', 138, 476, 219, 618] ['0.68', 735, 264, 812, 610]
/train_img_0003.jpg ['0.38', 712, 482, 747, 531] ['0.59', 1, 414, 168, 481] ['0.83', 554, 196, 612, 347] ['0.85', 524, 97, 688, 161] ['0.92', 658, 228, 807, 284]

……

test.txt文件:

dataset/train_data/train_img_0002.jpg 0,349,78,512,3 137,475,208,618,2 755,331,813,606,1 
dataset/train_data/train_img_0003.jpg 88,1,122,215,1 410,1,430,59,1 533,97,696,162,1 660,234,813,278,1 547,196,616,353,1 0,426,169,490,1 
dataset/train_data/train_img_0004.jpg 45,117,264,215,3 184,327,241,512,2 658,0,785,158,1 540,262,567,419,1 562,523,645,618,3 741,589,760,617,1 382,369,402,402,1 326,206,361,242,4 348,109,402,172,1 392,6,516,249,2 407,254,510,616,1 

……

写代码还是太没有章法。。慢慢改吧

发布了61 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/surserrr/article/details/97935850