opencv学习笔记(5)掩膜

# coding=UTF-8
import cv2 as cv
import numpy as np

def extrace_color_demo():
    capture = cv.VideoCapture(0) #获取电脑摄像头权限
    while(True):
    	#ret是布尔值,如果读取帧是正确的则返回True
    	#frame是每一帧的图像,是个三维矩阵
        ret,frame = capture.read()
        if ret == False:
            break
        #BGR图像转换为hsv图像
        hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        #设定阈值,确定追踪的颜色为绿色
        lower_hsv = np.array([35,43,46])
        upper_hsv = np.array([77,255,255])
        #根据阈值构建掩模,构建黑白图
        mask = cv.inRange(hsv,lowerb=lower_hsv,upperb=upper_hsv)
        #对原图像和掩模进行按位与运算,即绿颜覆盖白色区域,黑色保留
        res = cv.bitwise_and(frame, frame, mask=mask)
        cv.imshow("video",frame)
        cv.imshow("mask",mask)
        cv.imshow("res",res)
        c = cv.waitKey(40)
        if c ==27:
            break

extrace_color_demo()
cv.waitKey()
cv.destroyAllWindows()

效果如下(不是故意给老乡鸡打广告的,只是手边只有这个绿色的东西):
opencv学习笔记(5)掩膜_第1张图片
附上各种常用颜色的阈值表格:
opencv学习笔记(5)掩膜_第2张图片
如果不想追踪绿色,想要追踪其他颜色,比如说,想要追踪红色,只需要修改lower_hsv和upper_hsv的值就可以。
开头代码原封不动,只要对lower_hsv和upper_hsv做如下修改为:

lower_hsv = np.array([156,43,46])
upper_hsv = np.array([180,255,255])

再看效果:
opencv学习笔记(5)掩膜_第3张图片
拓展一下opencv中的图像逻辑运算。

# coding=UTF-8
import cv2 as cv
import numpy as np

m1 = cv.imread("D:/academic/picture/opencv_data/LinuxLogo.jpg")
m2 = cv.imread("D:/academic/picture/opencv_data/WindowsLogo.jpg")
#逻辑与
logic_and = cv.bitwise_and(m1,m2)
#逻辑或
logic_or = cv.bitwise_or(m1,m2)
#逻辑非
m1_logic_not = cv.bitwise_not(m1)
m2_logic_not = cv.bitwise_not(m2)
#逻辑异或
logic_xor = cv.bitwise_xor(m1,m2)
cv.imshow("LinuxLogo",m1)
cv.imshow("WindowsLogo",m2)
cv.imshow("logic_and",logic_and)
cv.imshow("logic_or",logic_or)
cv.imshow("logic_xor",logic_xor)
cv.imshow("m1_logic_not",m1_logic_not)
cv.imshow("m2_logic_not",m2_logic_not)
cv.waitKey()
cv.destroyAllWindows()

运行效果如下:
opencv学习笔记(5)掩膜_第4张图片
对每个像素点进行处理。
在这里,得提醒一下,处理像素点时,要把像素矩阵里的值写成二进制形式。。。
逻辑与:两个1为1,其余为0.因为黑色为[0,0,0],所以逻辑与运算之后的像素点,也是黑色。而其余的,由于白色全是255,写成二进制后是1111 1111,和彩色像素点逻辑与后,就是彩色像素点的样子。
逻辑或:有1为1,没1为0.
逻辑异或:不同为1,相同为0.
逻辑非:1为0,0为1.

你可能感兴趣的:(opencv学习)