做目标检测时,当类别数量不均衡时,就会用到背景贴上目标的方法来均衡类别样本;当你的标签是多坐标点标注的多边形标签(类似ocr中的文字区域检测标签)
def get_polygon_point(point_str):
#point_str类似'1,2,3,4,5,6'转换为[[1,2],[3,4],[5,6]]
point_str_list = list(map(int, point_str.split(',')))
point_list = []
for i in range(int(len(point_str_list)*0.5)):
point_ = [point_str_list[i*2], point_str_list[i*2+1]]
point_list.append(point_)
return point_list
import numpy as np
if __name__=='__main__':
I = np.zeros((h, w, 3), dtype=np.uint8)
h_, w_ = I.shape[:2]
points = get_polygon_point(point)
points = np.array(points, dtype=np.int32)
# pts = points.reshape((-1, 1, 2))
# cv2.polylines(pic, pts, True, (98, 9, 11), 10)
I = cv2.fillPoly(I, [points], color=(1, 1, 1))#生成模板
pic = pic * I #这样就去除了背景,只留下前景目标
#for i in range(h):
#for j in range(w):
# 获取原始图像
#B = pic[i, j][0]
#G = pic[i, j][1]
#R = pic[i, j][2]
#if B == 255 and G == 0 and R == 0:
#pass
#else:
#pic_new[i, j] = np.uint8((0, 0, 0))
原图:
处理后的图片:(只留下充电器插头)
整体处理思路:
step1:将多边性包裹的目标按照最小的box坐标(voc格式坐标)裁剪出来,并记录裁剪后的多边形坐标;
step2:挑选合适的背景图,并在背景图合适的位置裁剪一块和step1中大小相同的背景小区域,使用掩膜方式,将其和目标图融合;
step3:将step2中融合后的图片放回至背景图当中,注意和step2中扣取的坐标一致;
利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)_Adenialzz的博客-CSDN博客
opencv之绘制多边形----cv2.polylines, cv2.fillPoly_ancy的博客-CSDN博客



