Tuh*_*Sah 7 python opencv python-imaging-library scikit-image
我试图使用OpenCV和Python比较图像.
考虑这些图像:
两者都有一双相同的鞋子,设置为白色背景.唯一的区别是第一个背景比第二个背景更高.
我想知道如何以编程方式裁剪两者的白色背景,以便我只剩下这双鞋.
我必须补充一点,我不可能手动裁剪背景.
Kin*_*t 金 15
您在评论中的要求: The shoes are on a white background. I would like to completely get rid of the border; as in be left with a rectangular box with either a white or a transparent background, having the length and width of the shoes in the picture.
然后我的步骤裁剪目标区域:
- 转换为灰色和阈值
- 变形去除噪音
- 找到最大面积轮廓
- 裁剪并保存
#!/usr/bin/python3
# Created by Silencer @ Stackoverflow
# 2018.01.23 14:41:42 CST
# 2018.01.23 18:17:42 CST
import cv2
import numpy as np
## (1) Convert to gray, and threshold
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
th, threshed = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)
## (2) Morph-op to remove noise
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11,11))
morphed = cv2.morphologyEx(threshed, cv2.MORPH_CLOSE, kernel)
## (3) Find the max-area contour
cnts = cv2.findContours(morphed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
cnt = sorted(cnts, key=cv2.contourArea)[-1]
## (4) Crop and save it
x,y,w,h = cv2.boundingRect(cnt)
dst = img[y:y+h, x:x+w]
cv2.imwrite("001.png", dst)
Run Code Online (Sandbox Code Playgroud)
结果:
