我啟動我的模型并獲得我想要裁剪的區域的蒙版預測。
img = cv2.imread('picture.jpg')
img = cv2.resize(img, (224, 224))
print(img.shape)
T = np.zeros((1, 224, 224, 3), dtype='float32')
T[0]=img
prediction = model.predict(T , verbose=1)
prediction = prediction[0, :, : , :]
plt.imshow(img)
plt.show()
print(prediction.shape)
plt.imshow(np.squeeze(prediction).astype(np.float32))
plt.show()
此代碼是我得到的最接近所需影像的代碼,提供的此影像的問題是它不會裁剪黑色背景
result = prediction * img
plt.imshow((result/255).astype(np.float32))
plt.show()
我想要的影像應該是這樣的
uj5u.com熱心網友回復:
你可以試試這個:
prediction = np.squeeze(prediction).astype(np.float32)
threshold = 0.5
xmin,ymin,xmax,ymax = (-1,-1,-1,-1)
for j in range(224):
for i in range(224):
if prediction[j,i] <= threshold: continue
xmin = i if xmin == -1 or xmin > i else xmin
xmax = i if xmax == -1 or xmax < i else xmax
ymin = j if ymin == -1 or ymin > j else ymin
ymax = j if ymax == -1 or ymax < j else ymax
cropImg = img[ymin:ymax,xmin:xmax]
uj5u.com熱心網友回復:
您可以嘗試在預測的蒙版周圍找到邊界框,然后使用檢測到的邊界框裁剪影像。使用這個優秀的 SO 答案中的代碼,會產生如下結果:
def bbox2(img):
# from https://stackoverflow.com/a/31402351/19249364
rows = np.any(img, axis=1)
cols = np.any(img, axis=0)
rmin, rmax = np.where(rows)[0][[0, -1]]
cmin, cmax = np.where(cols)[0][[0, -1]]
return rmin, rmax, cmin, cmax
bbox = bbox2(prediction.squeeze())
cropped = img[bbox[0]:bbox[1] 1, bbox[2]:bbox[3] 1, :]
無法測驗此代碼,所以請告訴我它是否不起作用!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505701.html