两个函数介绍
imclearborder与bwareaopen,是matlab里的功能函数,博客里把他们变成python版本
功能介绍:
- imclearborder:删除图像的边界,什么意思呢,就是一张800X600的图片,如果再图片的边缘有半个足球,那么,我们可以指定将周围的一圈像素置为0 具体可以看:资料参考1
- bwareaopen:删除面积小于x区域的代码,使用连通性删除微小对象BW2 = bwareaopen(BW,P,conn)
第一个参数是图片,P表示删除小于P像素面积的对象,conn表示指定所需的连通性,默认使用8连通区域进行像素归属的判断具体可以参考:mathwork里的说明。
python代码
def imclearborder(imgBW, radius):
# 给定黑白图像,首先找到其所有轮廓
imgBWcopy = imgBW.copy()
contours,hierarchy = cv2.findContours(imgBWcopy.copy(), cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
# 获取图像尺寸
imgRows = imgBW.shape[0]
imgCols = imgBW.shape[1]
contourList = [] # 接触边界的轮廓的ID列表
# 对每个轮廓进行
for idx in np.arange(len(contours)):
# 得到轮廓
cnt = contours[idx]
# 查看轮廓中的每一个点
for pt in cnt:
rowCnt = pt[0][1]
colCnt = pt[0][0]
# 如果在边界的指定半径内部
# 那么删除这个轮廓
check1 = (rowCnt >= 0 and rowCnt < radius) or (rowCnt >= imgRows-1-radius and rowCnt < imgRows)
check2 = (colCnt >= 0 and colCnt < radius) or (colCnt >= imgCols-1-radius and colCnt < imgCols)
if check1 or check2:
contourList.append(idx)
break
for idx in contourList:
cv2.drawContours(imgBWcopy, contours, idx, (0,0,0), -1)
return imgBWcopy
def bwareaopen(imgBW, areaPixels):
# 给定黑白图像,找到所有轮廓
imgBWcopy = imgBW.copy()
contours,hierarchy = cv2.findContours(imgBWcopy.copy(), cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
# 计算每个轮廓的面积
for idx in np.arange(len(contours)):
area = cv2.contourArea(contours[idx]) # 计算轮廓面积
if (area >= 0 and area <= areaPixels):
cv2.drawContours(imgBWcopy, contours, idx, (0,0,0), -1)
return imgBWcopy
小结
最近什么也没有干,写了小论文的提纲,写完突然不知道该干嘛了,准备写第一篇小论文,发现想要下决心开始好难哇,不如先写几篇CSDN哈哈,轻松愉快无压力。BINGO