毕业设计-基于机器视觉的颜色目标识别

目录

前言

课题背景和意义

实现技术思路

 什么是彩色空间

 怎么利用彩色空间

颜色识别的过程

 读取图片进行hsv色域转换

对图片特定颜色识别

本地摄像头对视频流进行颜色识别

实现效果图样例


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

本次分享的课题是

🎯基于机器视觉的颜色目标识别

课题背景和意义

传统的机器视觉系统大部分是基于灰度图像进行图像处理,而如果检测颜色则需要选择彩色相机,因为彩色相机可以还原物体的真实色彩。

颜色是通过眼、脑和我们的生活经验所产生的一种对光的视觉效应。我们肉眼所能见到的光线,是由波长范围很窄的电磁波产生;颜色就是人对光的一种感觉,由大脑产生的一种感觉。例如:绿叶反射波长为500~570nm的绿光。

例如初中物理中所学的光的三原色由红、绿、蓝组成,这就是RGB颜色空间,除此之外还有HSV、CMY颜色空间。

实现技术思路

 什么是彩色空间

RGB三原色组成了五彩缤纷的世界,通过不同颜色之间的比例搭配得到赤橙黄绿青蓝紫,我们的相机、电视机就是利用颜色空间的模型,因此RGB主要面向硬件模型。色彩强度用0~255表示,总共256的灰度值,最大可呈现的色彩种类为256*256*256=16777216种。

CMY颜色空间它也是一种面向硬件设备(彩色打印机,复印机)的颜色模型,CMY代表青色,深红色和黄色(颜料原色)的组合。这三种颜色是RGB的二次色,用的是另一种方式定义。在机器视觉中涉及不到,这儿不做深入分析。

 HSV颜色空间是根据颜色的直观特性,由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。这个颜色模型十分重要,该模型十分接近人对颜色的感知。

H(色调):用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算。红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°。

S(饱和度):取值范围为0~255。

V(亮度):取值范围为0 (黑色)~255(白色)。

 怎么利用彩色空间

(1) 输入图像彩色图像

(2) 将彩色图像转化成所需的空间(按R分量法、最大值法、插值法等)

(3) 在所需的空间进行图像处理

颜色识别的过程

 读取图片进行hsv色域转换

frame=cv2.imread('lena.tiff')
src=cv2.imshow('photo',frame)
img_HSV=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

src=cv2.imshow('HSV',img_HSV)
cv2.waitKey()

对图片特定颜色识别

      for i in contours:  # 遍历所有的轮廓
            x, y, w, h = cv2.boundingRect(i)  # 将轮廓分解为识别对象的左上角坐标和宽、高
            # 在图像上画上矩形(图片、左上角坐标、右下角坐标、颜色、线条宽度)
            cv2.rectangle(Img, (x, y), (x + w, y + h), (0, 255,), 3)
            # 给识别对象写上标号
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(Img, str(p), (x - 10, y + 10), font, 1, (0, 0, 255), 2)  # 加减10是调整字符位置
            p += 1

本地摄像头对视频流进行颜色识别

 # 变成二值图像放在binary中
        ret, binary = cv2.threshold(dilation, 127, 255, cv2.THRESH_BINARY)
        binary, contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        p = 0
        for i in contours:  # 遍历所有的轮廓
            x, y, w, h = cv2.boundingRect(i)  # 将轮廓分解为识别对象的左上角坐标和宽、高
            # 在图像上画上矩形(图片、左上角坐标、右下角坐标、颜色、线条宽度)
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255,), 3)
    cv2.imshow('RGB', frame)
    cv2.imshow('HSV', HSV)
    cv2.imshow('MASK', mask)
    cv2.imshow('target', target)
    key = cv2.waitKey(3)

实现效果图样例

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值