原理
通過連通域分析算法能夠找到最大的連通域,即圖片的主體部分,然后保存該連通域的最小外接矩陣,即可去除掉無關(guān)的背景區(qū)域文章來源:http://www.zghlxwxcb.cn/news/detail-741932.html
代碼
'''
使用連通域分析算法去除圖像中的空白部分
并將圖像變?yōu)榻y(tǒng)一大小的正方形
'''
from skimage import measure
import skimage
import numpy as np
import os
import cv2
current_path = os.path.abspath(__file__)
# 待處理圖片的路徑
image_father_path = current_path.split('src')[0] + 'datapath'
files = os.listdir(image_father_path)
# 保存處理后的圖片的路徑
save_path = current_path.split('src')[0] + 'datapath'
if not os.path.exists(save_path):
os.mkdir(save_path)
i=0
for image in files:
# if i==2:
# break
raw_image = cv2.imread(f'{image_father_path}\\{image}')
# 1. 二值化
gray_image = cv2.cvtColor(raw_image, cv2.COLOR_BGR2GRAY)
ret, binary_image = cv2.threshold(gray_image, 1, 255, cv2.THRESH_BINARY)
# 2. 連通域分析
labels = measure.label(binary_image, connectivity=2)
# 3. 找出最大的連通域
properties = measure.regionprops(labels)
max_area = 0
i+=1
print(len(properties))
for prop in properties:
print(prop.bbox, prop.area)
if prop.area > max_area:
max_area = prop.area
max_prop = prop
# 4. 找出最大連通域的最小外接矩形
minr, minc, maxr, maxc = max_prop.bbox
print(minr, minc, maxr, maxc)
# 5. 將最小外接矩形的區(qū)域保存下來
crop_image = raw_image[minr:maxr, minc:maxc]
# 將圖片變?yōu)榻y(tǒng)一大小的正方形
crop_image = cv2.resize(crop_image, (224, 224))
# 6. 保存圖片
cv2.imwrite(f'{save_path}\\{image.split(".")[0]}.png', crop_image)
更多
更多圖像預處理操作工具集包含在這個github倉庫中文章來源地址http://www.zghlxwxcb.cn/news/detail-741932.html
到了這里,關(guān)于計算機視覺任務(wù)圖像預處理之去除圖像中的背景區(qū)域-------使用連通域分析算法(包含完整代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!