gpt4 book ai didi

python - 如何从图像中剪切轮廓并将其保存到新文件

转载 作者:太空狗 更新时间:2023-10-30 00:13:18 24 4
gpt4 key购买 nike

大家好,这是我的第一个问题,所以请保持温和。我在计算机视觉领域有一个项目,我是新手,希望能得到一些帮助。我有一张打印电路板的图像,我的(首要)任务是从背景中剪下电路板并将其保存到新文件中。

the desired result image is within the black rectangle-pic1

如果结果只是没有灰色背景的普通 pcb,那不会有问题。

到目前为止我尝试过的是,首先使用阈值 将图像转换为二进制。然后我使用 cv2.findContours 搜索轮廓,找到它们后我对轮廓进行排序并画出最大的

经过一些研究,我找到了一种切割轮廓并将其保存到新图像的方法。我使用 x,y,w,h = cv2.boundingRect 找到轮廓的宽度和高度,并使用 [y:y+h,x:x+w]只保存轮廓。问题是,使用这种方法,出于某种原因我也需要一些背景知识,正如您在图 3 中看到的那样。

有没有什么办法可以切断电路板,这样结果就是图像 pic1 中的黑色矩形,或者至少是没有灰色背景的电路板?

更新我设法制作了掩码并执行了 bitwise_and 但结果是黑色背景的板。 the result有人可以帮我去掉黑色背景,只留下图像中的木板吗?谢谢!

最佳答案

我在这方面做了一些工作,并按如下方式裁剪区域。我认为这就是您想要的。

enter image description here

enter image description here


基本上来说,我对图像进行那些操作。

1. medianBlur 图像,阈值并做 morph-op。

2.投影到轴,阈值并得到边界。

3.裁剪区域。


#!/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)

关于python - 如何从图像中剪切轮廓并将其保存到新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40312989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com