Python OpenCV使用滚动条自定义颜色

2016-06-12 Lu Huang 更多博文 » 博客 » GitHub »

Python OpenCV

原文链接 https://hlthu.github.io/opencv/2016/06/12/python-opencv-c.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


本节实现的是使用OpenCV里自带的有关滚动条的函数,可以调节R、G、B三个数值,并显示颜色。

  • 回调函数
  • 滚动条设置
  • 显示设置的颜色

实现过程

引用与创建空图

不再赘述,代码如下。

import cv2  
import numpy

# empty image
img = np.zeros((512, 512, 3), np.uint8)

设置空的回调函数

作为滚动条值变化时的回调函数,这里不需要做任何设置,设置为pass:

# callbacks
def nothing(x):
    pass

创建四个滚动条

其中三个分别为R、G和B,其值范围为0~255,还有一个控制是否显示颜色,值只能取0或1。

# creat track bars
cv2.createTrackbar('R', 'Track Bar', 0, 255, nothing)
cv2.createTrackbar('G', 'Track Bar', 0, 255, nothing)
cv2.createTrackbar('B', 'Track Bar', 0, 255, nothing)
cv2.createTrackbar('1:ON\n0:OFF', 'Track Bar', 0, 1, nothing)

获取滚动条数值并创建颜色

获取R、G、B滚动条的数值,如果此时控制颜色的为1,则显示该颜色,否则显示颜色为黑色。直到键盘输入q退出。

while(1):
        R = cv2.getTrackbarPos('R', 'Track Bar')
        G = cv2.getTrackbarPos('G', 'Track Bar')
        B = cv2.getTrackbarPos('B', 'Track Bar')
        F = cv2.getTrackbarPos('1:ON\n0:OFF', 'Track Bar')      
        if F == 1:
            img[:]=[B,G,R]
        else:
            img[:]=[0,0,0]
        cv2.imshow('Track Bar', img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cv2.destroyAllWindows()

源代码

整个程序的源代码如下:

# created by Huang Lu
# 27/08/2016 19:54:11   
# Department of EE, Tsinghua Univ.

import cv2
import numpy as np

# callbacks
def nothing(x):
    pass

if __name__ == '__main__':
    # empty image
    img = np.zeros((512, 512, 3), np.uint8)
    cv2.namedWindow('Track Bar')

    # creat track bars
    cv2.createTrackbar('R', 'Track Bar', 0, 255, nothing)
    cv2.createTrackbar('G', 'Track Bar', 0, 255, nothing)
    cv2.createTrackbar('B', 'Track Bar', 0, 255, nothing)
    cv2.createTrackbar('1:ON\n0:OFF', 'Track Bar', 0, 1, nothing)

    # while loop
    while(1):
        R = cv2.getTrackbarPos('R', 'Track Bar')
        G = cv2.getTrackbarPos('G', 'Track Bar')
        B = cv2.getTrackbarPos('B', 'Track Bar')
        F = cv2.getTrackbarPos('1:ON\n0:OFF', 'Track Bar')

        if F == 1:
            img[:]=[B,G,R]
        else:
            img[:]=[0,0,0]
        cv2.imshow('Track Bar', img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cv2.destroyAllWindows()

也可以参考我的GitHub上的,点击这里

运行结果

在命令行进入该源程序所在目录后,运行python main.py后即可显示结果。显示结果如下:

使用摄像头捕获视频并保存

参考

  • http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html
  • OpenCV-Python-Toturial-中文版.pdf
  • https://github.com/hlthu/Python-OpenCV-Learn/tree/master/Track_Bar/