open cv学习之识别图片颜色并绘制轮廓

一,实验原理

通过读取图像、转换到HSV颜色空间、设置颜色阈值、去噪、形态学处理、轮廓检测并筛选合适面积的轮廓,最终绘制并显示处理后的图像。

二,实验代码

import cv2
import numpy as np

# 读取图像文件
img = cv2.imread('8.png')
img = cv2.resize(img, (0, 0), fx=0.7, fy=0.7)

# 将图像从BGR空间转换为HSV空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 设置颜色检测的阈值,这里是在HSV空间内寻找黄色
hsv_min = np.array([26, 43, 46])
hsv_max = np.array([34, 255, 255])

# 查找在定义的颜色范围内的像素
img_mask_y = cv2.inRange(img_hsv, hsv_min, hsv_max)

# 使用中值滤波器进行图像滤波,删除图像中的噪声点
img_median_blur = cv2.medianBlur(img_mask_y, 3)

# 执行自适应阈值处理,得到二值化图像
img_binary = cv2.adaptiveThreshold(img_mask_y, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 7, 5)

# 定义一个3x3的椭圆形的结构元素,用于图像形态学操作的腐蚀和膨胀
kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))

# 腐蚀操作
img_erode = cv2.erode(img_binary, kernal)

# 膨胀操作,恢复原有的图像形状
img_erode_dilate = cv2.dilate(img_erode, kernal)

# 使用Otsu's二值化方法,将图像分割为黑白两部分
_, img_bin = cv2.threshold(img_erode_dilate, 127, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 查找并返回图像中的轮廓
contours, hierarchy = cv2.findContours(img_bin, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

# 在原图上画出查找到的轮廓
img_copy = img.copy()
for cnt in contours:
    area = cv2.contourArea(cnt)
    # 过滤掉面积过小或过大的轮廓
    if area < 50000 or area > 20000000:
        continue
    cv2.drawContours(img_copy, [cnt], 0, (0, 0, 255), 3)

# 显示处理后的图像
cv2.imshow('img', img_copy)
cv2.waitKey(0)

三,实验现象

标出目标轮廓,2个黄色大圆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值