【OpenCV学习】:Changing Colorspaces 练习作业,从视频中提取特定颜色物体

    科技2025-06-15  14

    OpenCV官网此章学习链接

    官网的教程很详细,一些函数的用法可能需要自己额外查找。

    import cv2 as cv import numpy as np #需要先转换成8位无符号整数格式 green = np.uint8([[[0, 255, 0]]]) hsv_green = cv.cvtColor(green, cv.COLOR_BGR2HSV) red = np.uint8([[[0, 0, 255]]]) hsv_red = cv.cvtColor(red, cv.COLOR_BGR2HSV) blue = np.uint8([[[255, 0, 0]]]) hsv_blue = cv.cvtColor(blue, cv.COLOR_BGR2HSV) lower_green = np.array([hsv_green[0][0][0]-10, 100, 100]) upper_green = np.array([hsv_green[0][0][0]+10, 255, 255]) lower_red = np.array([hsv_red[0][0][0]-10, 100, 100]) upper_red = np.array([hsv_red[0][0][0]+10, 255, 255]) lower_blue = np.array([hsv_blue[0][0][0]-10, 100, 100]) upper_blue = np.array([hsv_blue[0][0][0]+10, 255, 255]) #从笔记本电脑的1个内置摄像头读取视频文件 cap = cv.VideoCapture(0) while(1): #两个返回值分别是布尔值和读取帧图像,布尔值为False时文件结束 ret, frame = cap.read() if(ret == False): break hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) #cv.inRange函数检查array中的每个元素是否介于lowerb与upperb之间,是置为255,否则为0 mask_green = cv.inRange(hsv, lower_green, upper_green) mask_red = cv.inRange(hsv, lower_red, upper_red) mask_blue = cv.inRange(hsv, lower_blue, upper_blue) # mask = (mask_green or mask_red) or mask_blue 错误写法 mask = cv.bitwise_or(mask_green, mask_red) mask = cv.bitwise_or(mask, mask_blue) #参数列表(src1, src2, dst, mask) res = cv.bitwise_and(frame, frame, mask=mask) cv.imshow('frame', frame) cv.imshow('mask', mask) cv.imshow('res', res) #等待5ms,如果用户按下ESC(ASC2码为27)则退出循环 k = cv.waitKey(5) & 0xFF if(k == 27): break cv.destroyAllWindows()
    Processed: 0.016, SQL: 8