yolo鍒嗗壊鍥惧儚 (yolo v8鍒嗗壊)

1、通过yolov8的segment算法分割图片,预测出图片的mask;

model = YOLO('./runs/segment/train13/weights/best.pt')
image = Image.open("./carriage_3.jpg")
results = model.predict(source=image, save=True, save_txt=True)

2、求出原来图片的height, width;

origin_img = cv2.cvtColor(cv2.imread("./carriage_3.jpg", flags=cv2.IMREAD_COLOR), cv2.COLOR_BGR2RGB)
h, w = origin_img.shape[:2]

3、把mask变成相同大小,确保有校像素为1,无校像素为0;

a=results[0].masks.data.numpy()
pred_mask2 = np.where(a > 0, 1, 0)  #确保有效像素为1,无效像素为0
pred=pred_mask2.squeeze()
pred1 = cv2.resize(np.array(pred,dtype="uint8"),(w,h))

4、以防万一,把读取原图片确保为对应的uint8

image=np.array(origin_img, dtype=np.uint8)

5、原图片与mask矩阵的乘积,无效像素为0,相乘得到0(为黑点),有效的像素不变(原色);

seg_img2 = image * pred1[..., None]
cv2.imwrite("./222222.jpg", cv2.cvtColor(seg_img2.astype(np.uint8), cv2.COLOR_RGB2BGR))

閫氳繃yolov8鏋勫缓pnnx妯″瀷,yolov8鍒嗗壊鏁堟灉

原图

閫氳繃yolov8鏋勫缓pnnx妯″瀷,yolov8鍒嗗壊鏁堟灉

分割图

閫氳繃yolov8鏋勫缓pnnx妯″瀷,yolov8鍒嗗壊鏁堟灉

最后分割有效图