我在這方面做了一些工作,並按照如下方式裁剪該區域。我認爲這是你想要的。
![enter image description here](https://i.stack.imgur.com/Ofdd0.png)
![enter image description here](https://i.stack.imgur.com/cydaV.jpg)
Basicly說,我做的圖像所執行的操作。
1. medianBlur圖像,閾值和變形操作。
2.投影到軸,閾值並得到邊界。
作物的區域。
#!/usr/bin/python3
# 2017.10.04 23:45:01 CST
# 2017.10.05 00:52:26 CST
#how to cut a contour from an image and save it to a new file
from matplotlib import pyplot as plt
import numpy as np
import cv2
import time
imgname = "pcb.jpg"
img = cv2.imread(imgname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
## medianBlur, threshold and morph-close-op
median = cv2.medianBlur(gray, ksize=17)
retval, threshed = cv2.threshold(median, 110, 255, cv2.THRESH_BINARY_INV)
closed = cv2.morphologyEx(threshed, cv2.MORPH_CLOSE, np.ones(15,15))
## Project to the axis
H,W = img.shape[:2]
xx = np.sum(closed, axis=0)/H
yy = np.sum(closed, axis=1)/W
## Threshold and find the nozero
xx[xx<60] = 0
yy[yy<100] = 0
ixx = xx.nonzero()
iyy = yy.nonzero()
x1,x2 = ixx[0][0], ixx[0][-1]
y1,y2 = iyy[0][0], iyy[0][-1]
## label on the original image and save it.
res1 = cv2.rectangle(img.copy(), (x1,y1),(x2,y2), (0,0,255),2)
res2 = img[y1:y2,x1:x2]
cv2.imwrite("result1.png", res1)
cv2.imwrite("result2.png", res2)
通過拉伸填充在白色到黑色圖像輪廓創建掩模圖像。然後在'copyTo'中使用該掩碼來僅提取源圖像的所需部分。另一種方法是使用帶有「bitwise_and」的掩碼來遮蓋不需要的部分。 –
你能分享你用於分割輪廓的代碼嗎? – ZdaR