opencv 实现特定颜色线条提取与定位操作


Posted in Python onJune 02, 2020

本篇文章通过调用opencv里的函数简单的实现了对图像里特定颜色提取与定位,以此为基础,我们可以实现对特定颜色物体的前景分割与定位,或者特定颜色线条的提取与定位

主要步骤:

将RGB图像转化为HSV,H表示色调(度数表示0-180),S表示饱和度(取值0-255),V表示亮度(取值0-255),不同的颜色有着不同的取值范围,一般给出如下:

设定待提取颜色的HSV范围值,然后调用inRange函数实现对颜色空间的提取,该函数会将除目标颜色外的其余颜色为黑色背景,仅保留该颜色为前景

cv2.inRange(hsv, lower_red, upper_red)

参数解析:

第一个参数:hsv指的是原图

第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0

第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0

而在lower_red~upper_red之间的值变成255

二值化

腐蚀与膨胀操作,去除噪点,连接断点

调用findContours函数进行轮廓检测

cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图)

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

参数解析

第一个参数是寻找轮廓的图像;

第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):

cv2.RETR_EXTERNAL表示只检测外轮廓

cv2.RETR_LIST检测的轮廓不建立等级关系

cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。

cv2.RETR_TREE建立一个等级树结构的轮廓。

第三个参数method为轮廓的近似办法

cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1

cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

返回值

cv2.findContours()函数返回三个值,一个是图像,一个是轮廓本身,还有一个是每条轮廓对应的属性。

对于轮廓是以坐标的形式返回,可以通过函数cv2.drawContours()绘制出轮廓

绘制矩形区域对轮廓进行定位

主要代码如下:

import numpy as np
import cv2
import os
image = 'image1.jpg'
savefile = './mark1'
# image = os.listdir(image_file)
save_image = os.path.join(savefile, image)

#设定颜色HSV范围,假定为红色
redLower = np.array([156, 43, 46])
redUpper = np.array([179, 255, 255])

#读取图像
img = cv2.imread(image)

#将图像转化为HSV格式
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

#去除颜色范围外的其余颜色
mask = cv2.inRange(hsv, redLower, redUpper)

# 二值化操作
ret, binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY)

#膨胀操作,因为是对线条进行提取定位,所以腐蚀可能会造成更大间隔的断点,将线条切断,因此仅做膨胀操作
kernel = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(binary, kernel, iterations=1)

#获取图像轮廓坐标,其中contours为坐标值,此处只检测外形轮廓
_, contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

if len(contours) > 0:
  #cv2.boundingRect()返回轮廓矩阵的坐标值,四个值为x, y, w, h, 其中x, y为左上角坐标,w,h为矩阵的宽和高
  boxes = [cv2.boundingRect(c) for c in contours]
  for box in boxes:
    x, y, w, h = box
    #绘制矩形框对轮廓进行定位
    cv2.rectangle(img, (x, y), (x+w, y+h), (153, 153, 0), 2)
	#将绘制的图像保存并展示
	cv2.imwrite(save_image, img)
	cv2.imshow('image', img)
	cv2.waitKey(0)
	cv2.destroyAllWindows()

效果如图,一试卷红色批改字样为例:

原图:

opencv 实现特定颜色线条提取与定位操作

对批改区域定位图:

opencv 实现特定颜色线条提取与定位操作

以上这篇opencv 实现特定颜色线条提取与定位操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python文件夹与文件的操作实现代码
Jul 13 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
简单了解Django模板的使用
Dec 20 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
python和c语言哪个更适合初学者
Jun 22 Python
python 19个值得学习的编程技巧
Aug 15 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
详解OpenCV曝光融合
Apr 29 Python
Python爬虫入门有哪些基础知识点
Jun 02 #Python
Python实现进度条和时间预估的示例代码
Jun 02 #Python
python爬虫容易学吗
Jun 02 #Python
基于Python词云分析政府工作报告关键词
Jun 02 #Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 #Python
如何利用python web框架做文件流下载的实现示例
Jun 02 #Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 #Python
You might like
2021年最新CPU天梯图
2021/03/04 数码科技
php中字符集转换iconv函数使用总结
2014/10/11 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
跟老齐学Python之复习if语句
2014/10/02 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python中format()格式输出全解
2019/04/12 Python
解决yum对python依赖版本问题
2019/07/05 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
基于python实现查询ip地址来源
2020/06/02 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
银行实习生自我鉴定范文
2013/09/19 职场文书
学校清明节活动总结
2014/07/04 职场文书
公司规章制度范本
2015/08/03 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
Python之matplotlib绘制折线图
2022/04/13 Python