900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python裁剪图片并保存_python – 如何从图像中剪切轮廓并将其保存到新文件中

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

时间:2023-07-18 16:10:53

相关推荐

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

大家好,这是我的第一个问题所以请保持温和.我有一个计算机视觉领域的项目,我是新的,我会很感激一些帮助.我有一个pcb的图像,我的(首先)任务是从背景中切断电路板并将其保存到新文件.

如果结果只是没有灰色背景的普通pcb,那就没问题了.

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

经过一些研究,我发现了一种切割轮廓并将其保存为新图像的方法.我使用x,y,w,h = cv2.boundingRect来查找轮廓的宽度和高度,并使用[y:y h,x:x w]来仅保存轮廓.问题是,使用这种方法我也会因为某些原因而考虑一些背景,如pic3所示.

有没有办法切断电路板,所以结果将是图像pic1中的黑色矩形或至少没有灰色背景的电路板?

UPDATE

我设法制作了面具并做了bitwise_and,但结果是黑色background.the result板可以有人帮我删除黑色背景并只留下图像中的板吗?

谢谢!

最佳答案 我做了一些工作,并按照以下方式裁剪区域.我想这就是你想要的.

基本上,我在图像上做这些操作.

1. medianBlur图像,阈值和变形操作.

2.项目到轴,阈值并获得约束.

3.裁剪该地区.

#!/usr/bin/python3

# .10.04 23:45:01 CST

# .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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。