首页 分享 “Python

“Python

来源:花匠小妙招 时间:2024-12-14 15:57

一、引言

图像处理技术在现代科技中扮演着重要角色,但对于初学者来说,掌握这些技术可能显得有些复杂。在这篇博客中,我们将带你一步步了解如何利用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
下一篇: 玫瑰花颜色代表的含义

推荐分享