色彩追踪简介:在RGB图像中,我们感兴趣的部分往往具有趋于一致的颜色,我们想得到感兴趣部分时,可以考虑先找到特定颜色的区域。比如说有一张风景照,我们对蓝天白云(其它部分不是蓝色)感兴趣,我们考虑使用色彩追踪算法追踪图像中的蓝色和白色,得到原图的蓝色和白色区域。

关于色彩追踪算法的详细说明请查看以下链接

色彩追踪讲解

色彩追踪算法产生的掩膜中白色部分含一些黑色小点,使用掩膜直接作用于图像的话,效果不理想(如 图1)。学习图像处理的过程中,我们知道,使用图像形态学处理之闭运算(先膨胀,后腐蚀)能够有效地消除掩膜中这些小黑点,我们做此运算。

关于图像形态学处理的详细说明请查看以下链接

膨胀和腐蚀算法讲解
图像开闭运算讲解
图像形态学处理 opencv实现

图1:

实验:使用色彩追踪算法生成掩膜 + 图像形态学处理闭运算去噪 = 提取到的蓝色天空

实验原图:
实验结果:

实验源码 python
import cv2
import numpy as np
import matplotlib.pyplot as plt# BGR -> HSV
def BGR2HSV(_img):img = _img.copy() / 255.hsv = np.zeros_like(img, dtype=np.float32)# get max and minmax_v = np.max(img, axis=2).copy()min_v = np.min(img, axis=2).copy()min_arg = np.argmin(img, axis=2)# Hhsv[..., 0][np.where(max_v == min_v)]= 0## if min == Bind = np.where(min_arg == 0)hsv[..., 0][ind] = 60 * (img[..., 1][ind] - img[..., 2][ind]) / (max_v[ind] - min_v[ind]) + 60## if min == Rind = np.where(min_arg == 2)hsv[..., 0][ind] = 60 * (img[..., 0][ind] - img[..., 1][ind]) / (max_v[ind] - min_v[ind]) + 180## if min == Gind = np.where(min_arg == 1)hsv[..., 0][ind] = 60 * (img[..., 2][ind] - img[..., 0][ind]) / (max_v[ind] - min_v[ind]) + 300# Shsv[..., 1] = max_v.copy() - min_v.copy()# Vhsv[..., 2] = max_v.copy()return hsv# make mask
def get_mask(hsv):mask = np.zeros_like(hsv[..., 0])#mask[np.where((hsv > 180) & (hsv[0] < 260))] = 255mask[np.logical_and((hsv[..., 0] > 180), (hsv[..., 0] < 260))] = 1return mask# masking
def masking(img, mask):out = img.copy()# mask [h, w] -> [h, w, channel]mask = np.tile(mask, [3, 1, 1]).transpose([1, 2, 0])out *= maskreturn out# Erosion
def Erode(img, Erode_time=1):H, W = img.shapeout = img.copy()# kernelMF = np.array(((0, 1, 0),(1, 0, 1),(0, 1, 0)), dtype=np.int)# each erodefor i in range(Erode_time):tmp = np.pad(out, (1, 1), 'edge')# erodefor y in range(1, H+1):for x in range(1, W+1):if np.sum(MF * tmp[y - 1 : y + 2 , x - 1 : x + 2]) < 1 * 4:out[y-1 , x-1] = 0return out# Dilation
def Dilate(img, Dil_time=1):H, W = img.shape# kernelMF = np.array(((0, 1, 0),(1, 0, 1),(0, 1, 0)), dtype=np.int)# each dilate timeout = img.copy()for i in range(Dil_time):tmp = np.pad(out, (1, 1), 'edge')for y in range(1, H+1):for x in range(1, W+1):if np.sum(MF * tmp[y - 1 : y + 2, x - 1 : x + 2]) >= 1:out[y-1 , x-1] = 1return out# Opening morphology
def Morphology_Opening(img, time=1):out = Erode(img, Erode_time=time)out = Dilate(out, Dil_time=time)return out# Closing morphology
def Morphology_Closing(img, time=1):out = Dilate(img, Dil_time=time)out = Erode(out, Erode_time=time)return out# Read image
img = cv2.imread("../lantian.jpg").astype(np.float32)# RGB > HSV
hsv = BGR2HSV(img)# color tracking
mask = get_mask(hsv)# closing
mask = Morphology_Closing(mask, time=2)# opening
mask = Morphology_Opening(mask, time=0)# masking
out = masking(img, mask)out = out.astype(np.uint8)# Save result
cv2.imwrite("out.jpg", out)
cv2.imshow("result", out)
cv2.waitKey(0)
cv2.destroyAllWindows()
感谢您的阅读,帮忙点个赞再走呗!

使用色彩追踪和形态学运算得到图像中感兴趣区域相关推荐

  1. 【QtOpenCV 图像的感兴趣区域ROI】

    图像的ROI(region of interest)是指图像中感兴趣区域.在OpenCV中图像设置图像ROI区域,实现只对ROI区域操作. 文章目录 前言 一.GUI 二.实现代码 1.Rubber ...

  2. 活动作品计算机视觉课程第七讲-带你简单快速学习2021年春晚背后刘德华与背景分离切换到另一场景视觉算法(中集):OpenCV4图像分割提取图像任意感兴趣区域

    计算机视觉课程第七讲-带你简单快速学习2021年春晚背后刘德华与背景分离切换到另一场景视觉算法(中集):OpenCV4图像分割提取图像任意感兴趣区域 本专栏将会带大家学习 <计算机视觉与图形学& ...

  3. OpenCV学习记录(三):简单的使用图像掩膜提取图像中感兴趣对象

    OpenCV中给出了很多种提取对象特征的方法. 从简单的图像色块>图像阈值分割>轮廓查找>特征点检测>直方图检测等等有很多.这些简单的方法看似没有什么实际的场景可以直接拿来使用 ...

  4. 选择图像的“感兴趣区域”

    我们在前面的文章<图像的颜色选择>中提到,如下的行车图像,要提取黄色和白色的车道线,通过颜色选择,分别得到了黄颜色的区域和白颜色的区域. 下图分别是原始行车图像,白颜色位置图像,黄颜色位置 ...

  5. Halcon图像预处理-感兴趣区域(ROI)

    文章目录 前言 一.ROI的意义 二.创建ROI 1.ROI实现 2.示例 总结 前言 ROI是Halcon中的一个很重要的概念,为了减少计算量,只关注待检测物体或该物体周围的一片区域即可,ROI就是 ...

  6. 乳腺肿瘤超声图像感兴趣区域的自动识别综述

    1.  研究背景与意义 乳腺恶性肿瘤是女性最常见的恶性肿瘤之一,其死亡率已经超过宫颈癌死亡率,位居癌症死亡率的前五名 [d1]. 美国癌症协会的调查报告 [d2] 显示2008年全球新发乳腺癌病例达1 ...

  7. 基于matlab得图像感兴趣区域提取

    对于图像感兴趣区域(ROI)的提取,一般从来两个方面着手解决:一是利用图像分割技术提取ROI:二是从人眼得视觉特征出发,通过模拟人眼得视觉特点,寻找特定得视觉敏感区域,并将这些视觉敏感区域排序作为RO ...

  8. OpenCV实战(3)——图像感兴趣区域

    OpenCV实战(3)--图像感兴趣区域 0. 前言 1. 感兴趣区域 1.1 ROI 实例 1.2 定义 ROI 2. 使用图像掩码 3. 完整代码示例 小结 系列链接 0. 前言 在实际应用场景下 ...

  9. 使用Julia进行图像处理--使用形态学运算进行图像调整

    使用Julia进行图像处理--使用形态学运算进行图像调整 前言 图像二值化 基本运算 图像侵蚀 使用侵蚀分离物体 准备用于文本识别的图像 图像膨胀 合并几乎连接的对象 突出显示细节 派生操作 图像开运 ...

最新文章

  1. BIEE物理业务层编辑之后发布路径
  2. 吴恩达 coursera AI 专项五第一课(上)总结+作业答案
  3. Wi-Fi模块的设置方法汇总
  4. 自动控制matlab实验,自动控制matlab实验.doc
  5. 最新综述|深度学习的单目人体姿态估计
  6. jsTree插件简介(三)
  7. C++实现字符串数组的计数功能总结
  8. 每周荐书:机器学习、Java虚拟机、微信开发(评论送书)
  9. 《The Django book 2.0中文译本》PDF
  10. 游戏里的攻防-检测与反检测
  11. 计算机控制器如何调用打印机,怎样设置打印机的虚拟usb端口
  12. VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面,直接使用自带远程工具)...
  13. 重读微积分(八):全微分和法线
  14. 大专计算机考试题,大专计算机考试试题.doc
  15. 渡河问题matlab程序,商人渡河问题(MATLAB版)
  16. 数组图像处理:直方图均衡化
  17. 技术分析:苹果之后 HTML5将改变移动互联网
  18. 计算机网络与无线通信系统学习16:射频器件的基本参数
  19. QDateTimeEdit 用法总结
  20. 如何快速找到《独行月球》的相关资源?

热门文章

  1. ibm中文语音识别输入系统
  2. 灵云智能语音识别平台 促进人工智能
  3. 基于语音识别技术的声控鼠标光标程序设计
  4. linux如何重置网络,Ubuntu 重新设置网络
  5. biee12c连接hive_BIEE 12c Linux下连接Hadoop Hive
  6. 【狂神MySQL笔记】初识Mysql
  7. matlab三角波发生器精度改为定点型,关于matlab simulink中三角波模块的问题!
  8. php 替换 数组,php如何替换数组的值
  9. 电大计算机应用基础考试题6,2016电大计算机应用基础考试题及答案.doc
  10. on() 和 click() 的区别:二者在绑定静态控件时没有区别,但是如果面对动态产生的控件,只有 on() 能成功的绑定到动态控件中。以下实例中原先的 HTML 元素点击其身后的 Dele