python用opencv完成图像分割并进行目标物的提取
作者:A霸天下 发布时间:2023-12-04 21:31:29
标签:python,opencv,图像分割,提取
运行平台: Windows
Python版本: Python3.x
IDE: Spyder
今天我们想实现的功能是对单个目标图片的提取如图所示:
图片读取
###############头文件
import matplotlib.pyplot as plt
import os
import cv2
import numpy as np
from PIL import Image
#from skimage import io
import random
from PIL import Image
首先要完成图片的读取,通过cv2.imshow显示``
img = cv2.imread("1_3img.png")############图片读取
#cv2.imshow('picture', img)
#cv2.waitKey(0)
pictue_size=img.shape
picture_height=pictue_size[0]
picture_width=pictue_size[1]
边界提取
################灰度化,以及二值化
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,1,255,cv2.THRESH_BINARY)
############################
######################边界提取,contours包含边界值的坐标
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
边界提取采用cv2.findContours,在进行边缘提取的时候要把图像处理为二值图像,这里要说明一下,不同版本的opencv,cv2.findContours输出的值不同,有两个有三个,我们这个opencv版本输出为两个。
coontours为所有边界点的集合,是一个list,我们图中有三个区域,所以len(list)=3,每一个list里包含边界值数据。
图片提取
img2=[0 for i in range(len(contours))]
print(len(contours))
for i in range(len(contours)):
img2[i]=cv2.imread("./blackboard/test.jpg")############黑色底板图片读取
print(img2[i].shape)
# cv2.drawContours(img2[i],contours[i],-1,(0,0,255),3) #########画边界
###############全图片遍历找到相应的在轮廓之内的点
for a in range(picture_height):
for b in range(picture_width):
#############################################辨别是否在轮廓内是定义为1,不是定义为-1
result = cv2.pointPolygonTest(contours[i], (a,b), False)
if result>0:
img2[i][b,a]=100
##############下面填写保存代码
scipy.misc.imsave('picture'+str(i)+'.jpg',img2[i])
我们先读取一个黑色底版图片,里面所有的值为0,通过cv2.pointPolygonTest函数来分析像素点的位置是否在边界区域内,是返回1,不是返回-1,是的点我们赋值为100,并保存,最后得到我们想要的图片啦
来源:https://blog.csdn.net/qq_43534932/article/details/88386826


猜你喜欢
- 5. 其他杂项 5.1 生成图像PHP可以操作处理图像。如果你已经安装了GD库,你甚至可以利用PHP生成图像。
- call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: function a($b,$c) { echo $b; e
- 如下所示:#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/7/13 1
- 本文实例为大家分享了python使用PIL剪切图片和拼接图片的具体代码,供大家参考,具体内容如下因工作需要,接触到了PIL这个包,看其他人的
- 修改MySQL下的默认mysql数据库的user表,删除所有host为localhost记录,另外添加一些其他记录,重新启动MySQL服务器
- 本文讲述了python提示No module named images的解决方法,非常实用!分享给大家供大家参考。具体方法如下:出现提示:I
- Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。class Dog <
- 变量的种类在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable)全局变量
- <!-- #include file="../conn.asp" --&
- 背景介绍开发中遇到了一个需求:程序运行到某处时需要用户确认, 但不能一直傻等, 后面的程序不能被一直阻塞, 需要有个超时限制, 也就是这个程
- 今早在对一张table 创建primay key过程中发生了断电,当电脑再次启动时候,发现mysql 服务无法启动,使用 net start
- 本文实例讲述了Python封装原理与实现方法。分享给大家供大家参考,具体如下:【封装】 隐藏对象的属性和实现细节,仅对外提供公共访
- 如下所示:<div id="app"><el-form :model="ruleForm2&
- 一、requests库1、requests简介requests库就是一个发起请求的第三方库,requests允许你发送HTTP/1.1 请求
- 链表链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结
- 问题描述 windows错误安装方法:pip3 install numpy这种情况下虽然安装成功,但是在import numpy时会出现如下
- 目录mysqladmin命令UPDATE user 语句SET PASSWORD 语句root密码丢失的情况(待验证)mysqladmin命
- 一、基础概述机器学习(Machine Learing)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机
- 本文内容由经典论坛星级会员 lipengadmin 收集整理绝大部分属于转载,有很多还是出自咱们蓝色的经典论坛.*****[第1页目录]**
- MySQL数据库恢复到指定时间点时,我们必须通过MySQL全备+MySQL增量备份(可选)+MySQL的二进制日志(binlog)进行重放来