虚拟画笔 - OpenCV

本博客介绍如何利用OpenCV实现虚拟画笔,通过颜色检测和轮廓获取在摄像头画面中绘制图案。核心步骤包括画面获取、颜色检测、轮廓识别和绘制。在颜色检测阶段,通过HSV模型识别特定颜色,并在识别到的颜色轮廓上绘制点,形成线条。虽然目前存在绘制不连续和多颜色识别的问题,但这是迈向更人性化的虚拟画笔的第一步。
摘要由CSDN通过智能技术生成

  • title: 虚拟画笔 - 基于OpenCV
  • date: 2022-02-27
  • categories: - python - OpenCV
  • tags: [OpenCV, 虚拟画笔,计算机视觉]
  • index_img: https://pic1.zhimg.com/v2-32c4194eadd450868842042b010d3efd_720w.jpg?source=172ae18bt

本项目用到的核心技术是颜色检查以及轮廓/形状检查

一、画面获取

​ 对于这个项目,我们首先需要找到我们摄像头画面中的颜色,将RGB通道转换为HSV颜色模型并获取图像的轮廓。然后我们可以在图像轮廓中心放置绘制点,从而进行绘制。不论是哪一种颜色,都可以找到其轮廓,并放置绘制点进行图案的绘制。

​ 因此, 我们首先需要的是通过OpenCV库函数获取连接笔记本的摄像头,并将获取的画面进行三通道分离,从而检测出特定颜色的轮廓.

获取摄像头画面的代码

cap = cv2.VideoCapture(0)  # 这里将视频的路径填入摄像头ID即可, 0使用默认摄像头(笔记本/内置)
cap.set(3,640)   #宽, 编号为3   3:宽度, 4:高度 10:亮度, 11:对比度
cap.set(4, 480)  #高, 编号为4
cap.set(10,100)  #亮度100, 编号为10
while True:
     success, img = cap.read()
     cv2.imshow("Video", img) 
     if(cv2.waitKey(1) & 0xFF == ord('q')):
         break
        

二、颜色检测

​ 获取画面之后,接下来我们要做的便是找到画面中特定的颜色(期望识别的颜色,通过设置操纵杆自己调)

定义一个函数来找到特定的颜色

def findColor(img):
    imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    lower = np.array([h_min,s_min,v_min])
    upper = np.array([h_max,s_max,v_max])
    mask = cv2.inRange(imgHSV,lower,upper)
    cv2.imshow("img",mask)

这里我们可以定义一个数组来存放不同颜色的HSV值以及灰度。再改写并调用此函数,从而可以实现多个颜色的画笔进行绘制。

首先通过颜色检测来获取不同的颜色HSV值:

import cv2
import numpy as np

frameWidth = 640*0.5
frameHeight = 480*0.5
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)

def empty(a):
    pass

cv2.namedWindow("HSV")   ########## 初始化
cv2.resizeWindow("HSV",640,240)
cv2.createTrackbar("HUE Min","HSV",0,179,empty)
cv2.createTrackbar("SAT Min","HSV",0,255,empty)
cv2.createTrackbar("VALUE Min","HSV",0,255,empty)
cv2.createTrackbar("HUE Max","HSV",179,179,empty)
cv2.createTrackbar("SAT Max","HSV",255
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值