- 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