
我有這張圖片,我想用它制作一個二進制掩碼。主要的(最大的)矩形應該是白色的,圖片的其他部分應該是黑色的。像這樣:

為了解決這個問題,我想找到主矩形的輪廓。我的計劃是找到所有外部輪廓。然后得到面積最高的輪廓。首先,我嘗試找到所有輪廓并將它們繪制為二值影像。我的嘗試:
import numpy as np
import cv2
import matplotlib.pyplot as plt
from skimage import data, io
im = cv2.imread('train_1.jpg', 0)
contours, hierarchy = cv2.findContours(im.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
out = np.zeros_like(im)
cv2.drawContours(out, contours, -1, 255, 10)
io.imshow(out)
plt.show()
但即使是這個簡單的代碼也沒有找到任何輪廓。它出什么問題了?以及如何獲得面積最高的輪廓?也許我應該在這里應用 Canny 演算法?請幫我。
uj5u.com熱心網友回復:
您應該采用如下所示的獲取矩形最大面積的邏輯。您可以使用此代碼段來獲取該區域的蒙版影像:
import cv2
import numpy as np
image = cv2.imread("jigsaw.jpg")
image = cv2.resize(image, (image.shape[1] // 4, image.shape[0] // 4))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.adaptiveThreshold(blur, 255, 1, 1, 11, 2)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
max_area = 0
best_cnt = None
for counter in contours:
area = cv2.contourArea(counter)
if area > 1000:
if area > max_area:
max_area = area
best_cnt = counter
mask = np.zeros((gray.shape), np.uint8)
cv2.drawContours(mask, [best_cnt], 0, 255, -1)
cv2.drawContours(mask, [best_cnt], 0, 0, 2)
cv2.imwrite('mask_jigsaw.jpg', mask)
cv2.imshow("Image Mask", mask)
cv2.waitKey(0)
輸入影像:

輸出影像:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373240.html
標籤:Python opencv 图像处理 简历2 scikit-image
上一篇:錯誤概率-OpenCV影像分類
