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

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

4PM6F.jpg

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

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

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

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

UPDATE

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

谢谢!

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

Ofdd0.png

cydaV.jpg

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

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

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv如何把一个矩阵不同列分离开_学习OPEN_CV

OpenCv中文论坛精华地址http://www.opencv.org.cn/index.php/User:Ollydbg23http://sivp.sourceforge.net/(sivp)一、基础操作1. 数据类型 数据结构了解图像相关&#xff1a;cvArr cvMat IplImage数据数组的维数&#xff0c; 与数据的通道数 见P46 (76)2. 常见的矩阵操作熟悉3…

python文件合并_用Python 将两个文件的内容合并成一个新的文件.

一个文件的内容是:IntroductiontoProgramming,NetworkingFundamentals,InternetworkingTechnologies,PlatformTechnologies,InformationTechnologyforUsers,ComputerForensics,Enterpr... 一个文件的内容是: Introduction to Programming, Networking Fundamentals, Internetwo…

flash代码_Flash如何对制作文件进行优化

对FLASH进行优化分为两方面&#xff0c;一方面是代码上的优化&#xff0c;主要是通过优化提高FLASH性能&#xff0c;降低CPU占用和内存使用。另一方面是资源的优化&#xff0c;这方面的优化是为了减小编译后的文件大小以及制作文件的大小&#xff0c;因为如果不进行相应的优化&…

潜流式湿地计算_人工湿地计算书

人工湿地计算书1、尾水提升泵房集水池基本参数集水池设计规模为30000m3/d&#xff0c;约折合1250m3/h&#xff0c;按水力停留时间HRT为0.25 h计&#xff0c;集水井有效容积应为312.5 m3&#xff0c;考虑到与污水厂原有排污管道相契合&#xff0c;集水设计尺寸为&#xff1a;LBH…

deepin系统转为windows_windows系统下安装深度系统deepin

前期准备DiskGenius(用来扩展分区)deepin-20-amd64.iso(深度系统镜像文件)相关文件下载首先下载安装时要用的工具&#xff0c;分别为:DiskGenius , UltraISODiskGenius是一款磁盘工具&#xff0c;创建系统分区。UltraISO是用来打开系统光盘镜像文件工具。Win8/8.1/10无需下载Ul…

c3等待加载样式 vue_Vue.js__简易加载等待动画

Vue.js__简易加载等待动画Vue实现为览或讲琐了过自系一读页围这就多网解元当维自加&#xff0c;加载动画的样式取自其他出处&#xff0c;侵直分调浏器代&#xff0c;刚求的一学础过功互有解小久宗点差维含数删。将Vue属性览或讲琐了过自系一读页围这就多网解元当维和方法复制到…

软件开发模型_QT开发(二十三)——软件开发流程

一、软件开发流程简介软件开发流程是通过一系列步骤保证软件产品的顺利完成&#xff0c;是软件产品在生命周期内的管理学。软件开发流程的本质是软件开发流程与具体技术无关&#xff0c;是开发团队必须遵守开的规则。二、常见软件开发流程模型常见的软件开发流程模型包括即兴模…

python循环语句for计数_Bash For循环(递增计数)与for循环用法详解

先来看for循环的例子&#xff1a;用Bash Shell的for循环&#xff0c;每次递增数是500。复制代码 代码示例:#!/bin/bash##每次递增的数ADD_NUM500#递增1的话取消下行注释&#xff0c;并相应的注释另一句for的开头的#for ((i1;i<29500;i))#递增定义的数for ((i1;i<29500;i$…

python3.6.2用pyinstaller3.4报错_OceanBase 2.2 版本体验:用 BenchmarkSQL 跑 TPC-C

OB君&#xff1a;好消息&#xff01;「 OceanBase 2.2 版本 」正式上线官网啦&#xff01;&#xff08;点击阅读原文即可直接下载&#xff09;OceanBase 2.2版本是成功支撑2019年天猫双11大促的稳定版本&#xff0c;同时也是用于TPC-C测试且荣登TPC-C性能榜首的版本。我们将在接…

hive窗口函数_Hive sql窗口函数源码分析

在了解了窗口函数实现原理 spark、hive中窗口函数实现原理复盘 和 sparksql比hivesql优化的点(窗口函数)之后&#xff0c;今天又撸了一遍hive sql 中窗口函数的源码实现&#xff0c;写个笔记记录一下。简单来说&#xff0c;窗口查询有两个步骤&#xff1a;将记录分割成多个分区…

容大打印机ip修改工具_M1芯片版Mac无法连接打印机怎么办?

文末有优惠券在入手了M1芯片版MacBook Pro后&#xff0c;昨天我打算连接一下实验室的打印机。这个打印机的型号是HP LaserJet Professional M1213nf MFP&#xff0c;在同一个局域网内通过搜索IP即可连接。在我的旧设备2015款MacBook Air上&#xff0c;很轻松就连接了打印机。可…

语音对讲软件_三款语音转文字工具,语音输入,高效转换,准确率高

关于语音转文字的软件我在之前讲了很多&#xff0c;有些人听了也用了&#xff0c;效果不错&#xff0c;有些人看了就忘了&#xff0c;主要是不知道用它干嘛&#xff0c;其实语音转文字的软件主要功能就是为了让自己在写作的时候可以减少时间&#xff0c;提高效率&#xff0c;其…

linux中如何复制文件并重命名_linux复制重命名 linux复制一个文件并重命名

linux下怎么复制一个文件到另外一个目录并且重命名&#xff1f;使用Linux的CP命令复制一个文件&#xff0c;并指定一个新的文件名作为目标文件参数&#xff0c;实现复制文件时重命名文件的功能。例如&#xff0c;下面的命令将/root/fileaaa分配给/home目录并将其重命名为filebb…

python程序员搞笑段子_程序员的爆笑漫画和段子

Hi&#xff01;大家好呀&#xff01;我是你们幽默的喵哥&#xff01;每次推送&#xff0c;都是给大家推荐实用的项目或者技术&#xff0c;都比较枯燥。今天&#xff0c;喵哥就来给大家搞个有趣且幽默的。在程序员圈子中&#xff0c;我们也是有自己的职业文化的。比如&#xff0…

野火stm32呼吸灯程序_说一说STM32启动过程

STM32上电后是怎么启动的&#xff1f;main函数之前单片机都做了些什么&#xff1f;带着这些疑问我们开始进入游戏。。。。。首先&#xff0c;开局一张图&#xff0c;过程全靠编&#xff0c;如有说错的地方望能指正启动大致流程1- 上电启动或者硬件复位2- 单片机从0x00地址开始执…

linuxpython升级3.5_linux升级python3.5到3.6

在ubuntu里&#xff0c;zlib叫zlib1g&#xff0c;相应的zlib-devel叫zlib1g.dev。默认的安装源里没有zlib1g.dev。要在packages.ubuntu.com上找。$sudo apt-get install ruby然后再装zlib1g-dev就可以了$sudo apt-get install zlib1g-dev1. 安装必备的软件包centos: yum -y gro…

apache启动失败_请检查相关配置.√mysql5.1已启动._1、Apache启动失败,请检查相关配置-百度经验...

前几天电脑系统崩溃了,后边到服务中心重新恢复了系统,但是回来使用APMServ 5.2.6发现:1、Apache启动失败,请检查相关配置。√MySQL5.1已启动。系统的各种服务我都检查过了,都是正常开启的,百思不得其解,后边在百度上搜索一篇文章有个例子照做了以后结果成功了。---------------…

职业规划纵向横向_收下这份《职业规划喂饭式指南》

果不其然&#xff01;上篇文章发布后&#xff0c;我收到了被拿来举反例的网友小哥的抗议~~~讲道理&#xff0c;最后他拿到的Offer还是十分不错的&#xff0c;从此以后我的朋友圈又多了一位第一手保真瓜主&#xff0c;他好我也好~那么本期《职业规划喂饭式指南》来喽&#xff01…

mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

本文实例讲述了MySQL使用集合函数进行查询操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;COUNT函数SELECT COUNT(*) AS cust_num from customers;SELECT COUNT(c_email) AS email_num FROM customers;SELECT o_num, COUNT(f_id) FROM orderitems GROUP BY o_num;…

javascript字典中添加数组_如何在 JavaScript 中更好地使用数组

在 freeCodeCamp 社区阅读原文。本文短小精悍&#xff0c;我保证。在过去的数个月里&#xff0c;我注意到在我审阅的 pull request 中有四个&#xff08;关于数组使用的&#xff09;错误经常出现。同时&#xff0c;我自己也会犯这些错误&#xff0c;因此有了这篇文章。让我们一…