点击上方“小白学视觉”,选择加"星标"或“置顶”python
重磅干货,第一时间送达算法


在滤波、变换、缩放等任务中,图像分割具备重要的意义。图像分割是将不一样的对象划分为不一样的部分,并将这些区域以明显的颜色或者记号标记出来。图像分割是使用轮廓、边界框等概念进行其余高级计算机视觉任务(例如对象分类和对象检测)的基础。良好的图像分割为咱们后续的图像分类以及检测奠基了基础。
在本文里,咱们将介绍基于颜色的图像分割,并经过OpenCV将其实现。
小伙伴
可能会问,当咱们拥有像Caffe和Keras这样的工具时,为何要使用拥有21年历史的OpenCV库。
与Caffe和Keras等现代SOTA DL方法相比,OpenCV虽然在准确性方面有一些落后,可是运行速度相较于上述方法具备得天独厚的优点。
即便
使
用
最著名的神经网络框架之一的YOL
Ov
3进行对象检测时,其运行速度也是不尽如人意的
。
此外,
Darknet使用OpenMP(应用程序编程接口)进行编译的时间几乎是OpenCV的18倍。这更加说明了使用OpenCV的速度是比较快速的。
在OpenCV和Darknet上进行YOLOv3培训时CPU性能
颜色分割可用于检测身体肿瘤、从森林或海洋背景中提取野生动物的图像,或者从单一的背景图像中提取其余彩色物体。下面几幅图是图像分割的几个典型示例。:
从以上示例中能够看出,尽管OpenCV是一种更快的方法,可是它对于图像的分割结果并非很是的理想,有时会出现分割偏差或者错误分割的状况
接下来咱们将介绍如何经过OpenCV对图像进行颜色的分割。这里咱们有一张含有鸟的图片,咱们的目标是经过颜色分割尝试从图片中提取这只鸟。
import cv2 as cvimport matplotlib.pyplot as pltfrom PILimport Image!wget -nv https:img = Image.open('./bird.png')
接下来咱们使用滤波器对该图像进行预处理,对图像进行模糊操做,以减小图像中的细微差别。在OpenCV中提供了4个内置的滤波器,以知足用户对图像进行不一样滤波的需求。这4种滤波器的使用方式在下面的代码中给出。
可是,针对于本文中须要分割的图像,咱们并不须要将4种滤波器都使用。
blur = cv.blur(img,(5,5))blur0=cv.medianBlur(blur,5)blur1= cv.GaussianBlur(blur0,(5,5),0)blur2= cv.bilateralFilter(blur1,9,75,75)
若是小伙伴对图像滤波感兴趣,能够在这里进行了解
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_filtering/py_filtering,这里再作过多的介绍。
接下来咱们须要将图像从BGR(蓝绿色红色)转换为HSV(色相饱和度值)。为何咱们要从BGR空间中转到HSV空间中?由于像素B,G和R的取值与落在物体上的光相关,所以这些值也彼此相关,没法准确描述像素。相反,HSV空间中,三者相对独立,能够准确描述像素的亮度,饱和度和色度。
hsv = cv.cvtColor(blur2, cv.COLOR_BGR2HSV)
这个操做看似很
小
,但当咱们尝试找到要提取的阈值或像素范围时,它会使咱们的工做变得更加简单。
接下来是“颜色分割”的最重要一步,即“阈值分割”。这里咱们将肯定要提取的全部像素的阈值。
使用OpenCV
进行颜色分割中最重要步
骤——
阈值分割
,这多是一个至关繁琐的任务。
即便咱们
可能想到经过使用颜色选择器工具来了解像素值,可是
仍然须要进行不断的尝试,以便在全部像素中获取指望的像素,有些时候这也多是一项艰巨的任务。
具体操做以下:
low_blue = np.array([55, 0, 0])high_blue = np.array([118, 255, 255])mask = cv.inRange(hsv, low_blue, high_blue)
上面代码中最后一行的“Mask”将全部不在描述对象范围内的其余像素进行覆盖。程序运行结果以下图所示:
接下来,运行最后的代码以显示由Mask做为边界的图像。所使用的代码和程序运行结果在下面给出:
res = cv.bitwise_and(img,img, mask= mask)
那么经过上面的方式,咱们就实现了基于颜色的图像分割,感兴趣的小伙伴们能够经过上面的代码和步骤进行尝试,看看可否知足本身的图像分割需求。
交流群
欢迎加入公众号读者群一块儿和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(之后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,不然不予经过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,不然会请出群,谢谢理解~编程

