我是靠谱客的博主 迅速蜡烛,最近开发中收集的这篇文章主要介绍Opencv实现颜色检测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 1.前置知识点
      • (1) HSV,Opencv中的Mat和图片的属性
      • (2)Opencv中基础的知识点
      • (3)Opencv实现图像的基本变换
    • 2.代码实战
      • (1)创建窗口和设置视频帧的大小调整
      • (2)翻转图像和将图片从BGR->HSV
      • (3)获取hsv的色相值hue
      • (4)根据色相值对颜色进行定义
      • (5)绘制检测区域
      • (6)绘制检测结果的文本
      • (7)整体代码

1.前置知识点

(1) HSV,Opencv中的Mat和图片的属性

https://mydreamambitious.blog.csdn.net/article/details/125339425

(2)Opencv中基础的知识点

https://mydreamambitious.blog.csdn.net/article/details/125351256

(3)Opencv实现图像的基本变换

https://mydreamambitious.blog.csdn.net/article/details/125428402


2.代码实战

(1)创建窗口和设置视频帧的大小调整

cap=cv2.VideoCapture(0)
#设置显示的高宽
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1100)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,750)

(2)翻转图像和将图片从BGR->HSV

ret,frame=cap.read()
    #对图像帧进行翻转(因为opencv图像和我们正常是反着的
    frame=cv2.flip(src=frame,flipCode=2)
    # frame=cv2.resize(src=frame,dsize=(750,600))
    hsv_frame=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2HSV)

(3)获取hsv的色相值hue

#获取hsv的色相值hue
    pixel_center=hsv_frame[cy,cx]
    hue_value=pixel_center[0]

(4)根据色相值对颜色进行定义

color='Unknow'
    if hue_value<5:
        color='RED'
    elif hue_value<22:
        color='ORANGE'
    elif hue_value<33:
        color="YELLOW"
    elif hue_value<78:
        color="GREEN"
    elif hue_value<131:
        color="BLUE"
    elif hue_value<167:
        color="VIOLED"
    else:
        color="RED"

(5)绘制检测区域

#绘制检测区域
    cv2.rectangle(img=frame,pt1=(width//2+100,20),pt2=(width//2+390,200),color=(0,255,0),thickness=2)
    cv2.putText(img=frame,text='detect locate',org=(width//2+150,cy-10),fontFace=cv2.FONT_HERSHEY_SIMPLEX,
                fontScale=1.0,color=(0,255,0),thickness=2)

(6)绘制检测结果的文本

#获取检测位置的物体颜色
    b,g,r=int(frame[cy,cx][0]),int(frame[cy,cx][1]),int(frame[cy,cx][2])
    #绘制文本
    cv2.putText(img=frame,text=color,org=(20,50),fontFace=cv2.FONT_HERSHEY_SIMPLEX,
                fontScale=1.0,color=(0,255,0),thickness=2)
    cv2.circle(img=frame,center=(cx+30,cy),radius=5,color=(0,255,0),thickness=3)

(7)整体代码

import os
import cv2
import numpy as np

cap=cv2.VideoCapture(0)
#设置显示的高宽
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1100)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,750)

while cap.isOpened():
    ret,frame=cap.read()
    #对图像帧进行翻转(因为opencv图像和我们正常是反着的
    frame=cv2.flip(src=frame,flipCode=2)
    # frame=cv2.resize(src=frame,dsize=(750,600))
    hsv_frame=cv2.cvtColor(src=frame,code=cv2.COLOR_BGR2HSV)
    #获取读取的帧的高宽
    height,width,channel=frame.shape
    # print(height,width)
    #获取检测点位置
    cx = width // 2+190
    cy=height//6+30
    #绘制检测区域
    cv2.rectangle(img=frame,pt1=(width//2+100,20),pt2=(width//2+390,200),color=(0,255,0),thickness=2)
    cv2.putText(img=frame,text='detect locate',org=(width//2+150,cy-10),fontFace=cv2.FONT_HERSHEY_SIMPLEX,
                fontScale=1.0,color=(0,255,0),thickness=2)
    #获取hsv的色相值hue
    pixel_center=hsv_frame[cy,cx]
    hue_value=pixel_center[0]
    color='Unknow'
    if hue_value<5:
        color='RED'
    elif hue_value<22:
        color='ORANGE'
    elif hue_value<33:
        color="YELLOW"
    elif hue_value<78:
        color="GREEN"
    elif hue_value<131:
        color="BLUE"
    elif hue_value<167:
        color="VIOLED"
    else:
        color="RED"
    #获取检测位置的物体颜色
    b,g,r=int(frame[cy,cx][0]),int(frame[cy,cx][1]),int(frame[cy,cx][2])
    #绘制文本
    cv2.putText(img=frame,text=color,org=(20,50),fontFace=cv2.FONT_HERSHEY_SIMPLEX,
                fontScale=1.0,color=(0,255,0),thickness=2)
    cv2.circle(img=frame,center=(cx+30,cy),radius=5,color=(0,255,0),thickness=3)

    cv2.imshow('frame',frame)
    key=cv2.waitKey(1)
    if key==27:
        break

cap.release()
cv2.destroyAllWindows()

# #图片的读取和缩放
# img=cv2.imread('images/1.png')
# img=cv2.resize(src=img,dsize=(450,450))
# #显示图片
# cv2.imshow('img',img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

if __name__ == '__main__':
    print('Pycharm')

参考链接 https://b23.tv/6ZJL1WY

最后

以上就是迅速蜡烛为你收集整理的Opencv实现颜色检测的全部内容,希望文章能够帮你解决Opencv实现颜色检测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部