“Python
一、引言
图像处理技术在现代科技中扮演着重要角色,但对于初学者来说,掌握这些技术可能显得有些复杂。在这篇博客中,我们将带你一步步了解如何利用Python和OpenCV来识别图像中的颜色并绘制轮廓。通过简明的实验原理和代码示例,你将学会如何在实际项目中应用这些基础技术。
二、实验原理
找到轮廓:使用cv2.findContours()函数找到图像中的轮廓。轮廓是图像中具有相同颜色或灰度值的所有连续点。
绘制轮廓:使用cv2.drawContours()函数在原始图像上绘制找到的轮廓。
三、实验代码
3.1 功能简介
contours,hierarchy = cv2.findContours(image,mode,method)
用于在二值图像中检测轮廓。轮廓可以看作是将相同颜色或灰度级别的所有连续点(沿边界)连接起来的曲线。
3.2 参数详解
image:表示输入的二值化图像。
mode:表示轮廓的检索模式。有以下几种:
cv2.RETR_EXTERNAL: 只检索最外层的轮廓。
cv2.RETR_LIST: 检索所有的轮廓,但不建立层级关系。
cv2.RETR_CCOMP: 检索所有轮廓,并将它们组织成两层:顶层是外部边界,第二层是内部孔洞的边界。
cv2.RETR_TREE: 检索所有轮廓,并重构嵌套轮廓的完整层级。
method:轮廓的表示方法。有以下几种:
cv2.CHAIN_APPROX_NONE: 将所有的点连成线。
cv2.CHAIN_APPROX_SIMPLE: 压缩水平的、垂直的和对角线段,只保留其端点。
cv2.CHAIN_APPROX_TC89_L1 和 cv2.CHAIN_APPROX_TC89_KCOS: 其他更高级的近似方法。
3.3 返回值
contours: 一个包含轮廓的列表。每个轮廓都是一个由点(x, y)坐标组成的Numpy数组。
hierarchy: 可选输出,包含关于图像拓扑的信息。仅在使用层级检索模式时返回。
3.4 功能简介
cv2.findContours(image, mode, method, contour, hierarchy, offset.)
用于在图像上绘制轮廓。
3.5 参数详解
image: 要绘制轮廓的原始图像。
contours: 包含所有轮廓的列表,通常是通过 cv2.findContours() 获取的。
contourIdx: 指定绘制哪个轮廓。如果是 -1,则绘制所有轮廓。
color: 轮廓线条的颜色,使用BGR格式。
thickness: 轮廓线条的厚度。如果是 -1,则填充轮廓内部。
lineType: 线条的类型,可以是 8、4 或者 cv2.LINE_AA(抗锯齿)。
hierarchy: 可选参数,使用和 cv2.findContours() 相同的层级信息。
maxLevel: 绘制轮廓的最大层级,如果是 -1,则绘制所有层级。
3.6 代码实现
识别图片中的黄色
import cv2
import numpy as np
img = cv2.imread("./color1.png")
img = cv2.resize(img, (0,0), fx=0.5,fy=0.5)
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hsv_min = np.array([26,43,46])
hsv_max = np.array([34,255,255])
img_hsv_mask = cv2.inRange(img_hsv,hsv_min,hsv_max)
img_hsv_mask_color = cv2.bitwise_and(img,img,mask=img_hsv_mask)
img_gaussian_blur = cv2.GaussianBlur(img_hsv_mask, (3,3),10)
kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
img_erode = cv2.erode(img_gaussian_blur,kernal)
img_erode_dilate = cv2.dilate(img_erode,kernal)
contours, hierarchy = cv2.findContours(img_erode_dilate,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
img_copy = img.copy()
for i in contours:
if cv2.contourArea(i)<200 or cv2.contourArea(i)>200000:
continue
cv2.drawContours(img_copy,contours,-1,(0,0,255),2)
cv2.imshow('image', img)
cv2.imshow('img_copy', img_copy)
cv2.waitKey(0)
结果:
五、结语
在本文中,我们探索了如何通过颜色识别和轮廓绘制来处理图像。通过将图像转换为HSV颜色空间,并设定特定的颜色范围,我们成功地提取了目标颜色区域。此外,我们使用形态学变换和滤波技术,进一步优化了图像处理效果,最终通过轮廓检测技术准确地绘制了目标区域的轮廓。
感谢阅读,并期待你的反馈与交流!
相关知识
【Python】基础
Python(派森)
SKYNE/python
python 玫瑰花程序
花草 python
Python文字花
python玫瑰花代码简单
Python学习手册
python玫瑰花代码讲解
【Python绘画】花朵
网址: “Python https://www.huajiangbk.com/newsview1094034.html
上一篇: 【AI实战项目】基于OpenCV |
下一篇: 玫瑰花颜色代表的含义 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039