目录
一 实现方法
二 涉及的OpenCV函数
三 代码
四 效果图
一 实现方法
①利用OTSU方法将前景与背景分割。
②使用连通区域分析可以将具有相同像素值且位置相邻的前景像素点组成的图像区域识别。
③画bbox。
④显示结果。
二 涉及的OpenCV函数
① OpenCV提供了cv2.threshold()用于实现阈值处理。
ret, dst = cv2.threshold(src, thresh, maxval, type)
ret:代表返回的阈值。
src:原图。
dst: 输出图。
thresh:要设定的阈值。
maxval: 当像素值超过了阈值或者小于阈值所赋予的值。
type:二值化操作的类型,包含5种类型。
② OpenCV提供了cv2.connectedComponentsWithStats()函数用于处理不规则连通区域。
retval, labels, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=8)
image : 是要处理的图片,8位单通道的图像。
connectivity : 可以选择是4连通还是8连通。
retval : 返回值是连通区域的数量。
labels :一个输入图像大小的矩阵,其中每个元素的值等于其标签。
stats :包含5个参数分别为x,y,h,w,s。分别对应每一个连通区域的外接矩形的起始坐标x,y;外接矩形的wide,height;s是labels对应的连通区域的像素个数。
centroids : 返回的是连通区域的质心。
三 代码
import cv2
import matplotlib.pyplot as plt
def dealImg(img):
b, g, r = cv2.split(img)
img_rgb = cv2.merge([r, g, b])
return img_rgb
def dealImageResult(img_path):
img = cv2.imread(img_path)
img_box = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# OTSU方法实现前景与背景分割
ret2, dst_OTSU = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 识别出目标区域并用bbox框起来
# 连通区域分析可以将具有相同像素值且位置相邻的前景像素点组成的图像区域识别
ret, labels, stats, centroid = cv2.connectedComponentsWithStats(dst_OTSU)
Iarea = sorted(stats, key=lambda s: s[-1], reverse=False)[-2]
cv2.rectangle(
img_box,
(Iarea[0], Iarea[1]),
(Iarea[0] + Iarea[2], Iarea[1] + Iarea[3]),
(255, 0, 0),
3
)
fig = plt.figure(figsize=(8, 8))
titles = ["img", "gray", "OTSU", "img_box"]
img = dealImg(img)
img_box = dealImg(img_box)
images = [img, gray, dst_OTSU, img_box]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
fig.savefig('test_results.jpg', bbox_inches='tight')
if __name__ == '__main__':
dealImageResult("3.jpg")
pass
四 效果图
前文回顾
入门篇目录
数字图像处理(入门篇)一 图像的数字化与表示
数字图像处理(入门篇)二 颜色空间
数字图像处理(入门篇)三 灰度化
数字图像处理(入门篇)四 像素关系
数字图像处理(入门篇)五 图像数据预处理之颜色空间转换
数字图像处理(入门篇)六 图像数据预处理之坐标变化
数字图像处理(入门篇)七 图像数据预处理之灰度变化
数字图像处理(入门篇)八 图像数据预处理之直方图
数字图像处理(入门篇)九 图像数据预处理之滤波
数字图像处理(入门篇)十 边缘检测
数字图像处理(入门篇)十一 形态学处理
数字图像处理(入门篇)十二 自适应阈值分割
数字图像处理(入门篇)十三 仿射变换
数字图像处理(入门篇)十四 透视变换