一、圖像二值化
# 圖片二值化
from PIL import Image
img = Image.open('7.jpg')
# 模式L”爲灰色圖像,它的每個像素用8個bit表示,0表示黑,255表示白,其他數字表示不同的灰度。
Img = img.convert('L')
Img.save("test1.jpg")
# 自定義灰度界限,大於這個值爲黑色,小於這個值爲白色
threshold = 200
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
# 圖片二值化
photo = Img.point(table, '1')
photo.save("test2.jpg")
二、連通域標記
用區域生長法對連通域標記
# -*- coding: utf-8 -*-
from PIL import Image
import numpy as np
#定位一個種子,返回種子位置
def seed_dirt(img):
for j in range(height):
for i in range(width):
a = img.getpixel((i,j))
if a == 0:
return((i,j))
#標記連通區域-4連通
def LableConnectedRagion4(labelmap,labelindex,quene):
#flag = len(quene)
while len(quene) !=0 :
(m,n) = quene[0]
quene.remove(quene[0])
if img.getpixel((m,n+1)) == 0 and labelmap[n+1][m] == 0:
quene.append((m,n+1))
labelindex += 1
labelmap[n+1][m] = 1
if img.getpixel((m,n-1)) == 0 and labelmap[n-1][m] == 0:
quene.append((m,n-1))
labelindex += 1
labelmap[n-1][m] = 1
if img.getpixel((m+1,n)) == 0 and labelmap[n][m+1] == 0:
quene.append((m+1,n))
labelindex += 1
labelmap[n][m+1] = 1
if img.getpixel((m-1,n)) == 0 and labelmap[n][m-1] == 0:
quene.append((m-1,n))
labelindex += 1
labelmap[n][m-1] = 1
#標記連通區域-8連通
def LableConnectedRagion8(labelmap,labelindex,quene):
#flag = len(quene)
while len(quene) !=0 :
(m,n) = quene[0]
quene.remove(quene[0])
# print(m,n)
# print(quene)
for i in range(-1,2):
for j in range(-1,2):
if img.getpixel((m+i,n+j)) == 0 and labelmap[n+j][m+i] == 0:
quene.append((m+i,n+j))
labelindex += 1
labelmap[n+j][m+i] = 1
#匹配標記矩陣輸出第一個連通域圖片
def save_image(labelmap):
for i in range(len(labelmap)):
for j in range(len(labelmap[0])):
if labelmap[i][j] != 0:
newImg.putpixel((j,i),0)
newImg.show()
newImg.save("test3.jpg")
if __name__ =="__main__":
img = Image.open('test2.jpg')
img = img.convert('1')
width = img.size[0]
height = img.size[1]
print(width,height)
newImg = Image.new("1",(width,height),1) #新建圖片newImg儲存兩圖片相加圖片
labelmap = np.zeros((height,width)) #標記矩陣
labelindex = 0 #標記記數
quene = [] #存儲標記點位置信息
(x,y) = seed_dirt(img)
quene.append((x,y))
labelindex += 1
labelmap[y][x] = 1
LableConnectedRagion4(labelmap,labelindex,quene)
save_image(labelmap)