python用opencv完成圖像分割并進(jìn)行目標(biāo)物的提取
運(yùn)行平臺(tái): Windows
Python版本: Python3.x
IDE: Spyder
今天我們想實(shí)現(xiàn)的功能是對(duì)單個(gè)目標(biāo)圖片的提取如圖所示:

圖片讀取
###############頭文件 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
首先要完成圖片的讀取,通過(guò)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包含邊界值的坐標(biāo) contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
邊界提取采用cv2.findContours,在進(jìn)行邊緣提取的時(shí)候要把圖像處理為二值圖像,這里要說(shuō)明一下,不同版本的opencv,cv2.findContours輸出的值不同,有兩個(gè)有三個(gè),我們這個(gè)opencv版本輸出為兩個(gè)。
coontours為所有邊界點(diǎn)的集合,是一個(gè)list,我們圖中有三個(gè)區(qū)域,所以len(list)=3,每一個(gè)list里包含邊界值數(shù)據(jù)。
圖片提取
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) #########畫邊界
###############全圖片遍歷找到相應(yīng)的在輪廓之內(nèi)的點(diǎn)
for a in range(picture_height):
for b in range(picture_width):
#############################################辨別是否在輪廓內(nèi)是定義為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])
我們先讀取一個(gè)黑色底版圖片,里面所有的值為0,通過(guò)cv2.pointPolygonTest函數(shù)來(lái)分析像素點(diǎn)的位置是否在邊界區(qū)域內(nèi),是返回1,不是返回-1,是的點(diǎn)我們賦值為100,并保存,最后得到我們想要的圖片啦
到此這篇關(guān)于python用opencv完成圖像分割并進(jìn)行目標(biāo)物的提取的文章就介紹到這了,更多相關(guān)python opencv圖像分割并提取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python字符串的15個(gè)基本操作(小結(jié))
這篇文章主要介紹了Python字符串的15個(gè)基本操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
python中的循環(huán)結(jié)構(gòu)問(wèn)題
這篇文章主要介紹了python中的循環(huán)結(jié)構(gòu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Python異常處理try語(yǔ)句應(yīng)用技巧實(shí)例探究
異常處理在Python中是至關(guān)重要的,try-except是用于捕獲和處理異常的核心機(jī)制之一,本文就帶大家深入了解如何使用try-except,處理各種異常情況2024-01-01
python中圖形庫(kù)turtle庫(kù)詳解(適用于計(jì)算機(jī)二級(jí))
Turtle庫(kù)是Python語(yǔ)言中的一個(gè)圖形庫(kù),可以用來(lái)繪制各種形狀,如線條、矩形、圓形等等,下面這篇文章主要給大家介紹了關(guān)于python中圖形庫(kù)turtle庫(kù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08

