耶耶耶耶耶 发表于 2024-12-16 21:07:49

“Python-OpenCV初体验:简单实现颜色辨认与轮廓绘制”

一、引言
图像处理技术在当代科技中扮演着紧张脚色,但对于初学者来说,掌握这些技术大概显得有些复杂。在这篇博客中,我们将带你一步步相识如何利用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 代码实现
辨认图片中的黄色
https://i-blog.csdnimg.cn/direct/0d2c1749cab241139db1d96a71dd4ec5.png
import cv2
import numpy as np

# 1、输入图片
img = cv2.imread("./color1.png")
img = cv2.resize(img, (0,0), fx=0.5,fy=0.5)
# 2、需要识别颜色 转换HSV颜色空间
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hsv_min = np.array()
hsv_max = np.array()
img_hsv_mask = cv2.inRange(img_hsv,hsv_min,hsv_max)
# 3、设定要识别HSV颜色范围,并利用inrange找到该颜色范围
img_hsv_mask_color = cv2.bitwise_and(img,img,mask=img_hsv_mask)
# 4、进行滤波
img_gaussian_blur = cv2.GaussianBlur(img_hsv_mask, (3,3),10)

# 5、形态学变换——开运算 先腐蚀再膨胀
kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
img_erode = cv2.erode(img_gaussian_blur,kernal)
img_erode_dilate = cv2.dilate(img_erode,kernal)

# 6、寻找轮廓
contours, hierarchy = cv2.findContours(img_erode_dilate,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

# 7、for循环遍历所有轮廓--通过面积筛选你想要的轮廓 cv2.contourArea()--绘制轮廓
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)

# 8、输出图片
cv2.imshow('image', img)

cv2.imshow('img_copy', img_copy)


cv2.waitKey(0)  结果:
https://i-blog.csdnimg.cn/direct/8abbc5aab00040629b9a263fedcf08f6.jpeg
五、结语
在本文中,我们探索了如何通过颜色辨认和轮廓绘制来处理图像。通过将图像转换为HSV颜色空间,并设定特定的颜色范围,我们成功地提取了目标颜色区域。别的,我们使用形态学变动和滤波技术,进一步优化了图像处理结果,最终通过轮廓检测技术正确地绘制了目标区域的轮廓。
感谢阅读,并期待你的反馈与交流!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: “Python-OpenCV初体验:简单实现颜色辨认与轮廓绘制”