Path: blob/master/ColorSpaces/interactiveColorSegment.py
3118 views
import cv2,time,argparse,glob1import numpy as np23#global variable to keep track of4show = False56def onTrackbarActivity(x):7global show8show = True9pass101112if __name__ == '__main__' :1314# Get the filename from the command line15files = glob.glob('images/rub*.jpg')16files.sort()17# load the image18original = cv2.imread(files[0])19#Resize the image20rsize = 25021original = cv2.resize(original,(rsize,rsize))2223#position on the screen where the windows start24initialX = 5025initialY = 502627#creating windows to display images28cv2.namedWindow('P-> Previous, N-> Next',cv2.WINDOW_AUTOSIZE)29cv2.namedWindow('SelectBGR',cv2.WINDOW_AUTOSIZE)30cv2.namedWindow('SelectHSV',cv2.WINDOW_AUTOSIZE)31cv2.namedWindow('SelectYCB',cv2.WINDOW_AUTOSIZE)32cv2.namedWindow('SelectLAB',cv2.WINDOW_AUTOSIZE)3334#moving the windows to stack them horizontally35cv2.moveWindow('P-> Previous, N-> Next',initialX,initialY)36cv2.moveWindow('SelectBGR',initialX + (rsize + 5),initialY)37cv2.moveWindow('SelectHSV',initialX + 2*(rsize + 5),initialY)38cv2.moveWindow('SelectYCB',initialX + 3*(rsize + 5),initialY)39cv2.moveWindow('SelectLAB',initialX + 4*(rsize + 5),initialY)4041#creating trackbars to get values for YCrCb42cv2.createTrackbar('CrMin','SelectYCB',0,255,onTrackbarActivity)43cv2.createTrackbar('CrMax','SelectYCB',0,255,onTrackbarActivity)44cv2.createTrackbar('CbMin','SelectYCB',0,255,onTrackbarActivity)45cv2.createTrackbar('CbMax','SelectYCB',0,255,onTrackbarActivity)46cv2.createTrackbar('YMin','SelectYCB',0,255,onTrackbarActivity)47cv2.createTrackbar('YMax','SelectYCB',0,255,onTrackbarActivity)4849#creating trackbars to get values for HSV50cv2.createTrackbar('HMin','SelectHSV',0,180,onTrackbarActivity)51cv2.createTrackbar('HMax','SelectHSV',0,180,onTrackbarActivity)52cv2.createTrackbar('SMin','SelectHSV',0,255,onTrackbarActivity)53cv2.createTrackbar('SMax','SelectHSV',0,255,onTrackbarActivity)54cv2.createTrackbar('VMin','SelectHSV',0,255,onTrackbarActivity)55cv2.createTrackbar('VMax','SelectHSV',0,255,onTrackbarActivity)5657#creating trackbars to get values for BGR58cv2.createTrackbar('BGRBMin','SelectBGR',0,255,onTrackbarActivity)59cv2.createTrackbar('BGRBMax','SelectBGR',0,255,onTrackbarActivity)60cv2.createTrackbar('BGRGMin','SelectBGR',0,255,onTrackbarActivity)61cv2.createTrackbar('BGRGMax','SelectBGR',0,255,onTrackbarActivity)62cv2.createTrackbar('BGRRMin','SelectBGR',0,255,onTrackbarActivity)63cv2.createTrackbar('BGRRMax','SelectBGR',0,255,onTrackbarActivity)6465#creating trackbars to get values for LAB66cv2.createTrackbar('LABLMin','SelectLAB',0,255,onTrackbarActivity)67cv2.createTrackbar('LABLMax','SelectLAB',0,255,onTrackbarActivity)68cv2.createTrackbar('LABAMin','SelectLAB',0,255,onTrackbarActivity)69cv2.createTrackbar('LABAMax','SelectLAB',0,255,onTrackbarActivity)70cv2.createTrackbar('LABBMin','SelectLAB',0,255,onTrackbarActivity)71cv2.createTrackbar('LABBMax','SelectLAB',0,255,onTrackbarActivity)7273# show all images initially74cv2.imshow('SelectHSV',original)75cv2.imshow('SelectYCB',original)76cv2.imshow('SelectLAB',original)77cv2.imshow('SelectBGR',original)78i = 079while(1):8081cv2.imshow('P-> Previous, N-> Next',original)82k = cv2.waitKey(1) & 0xFF8384# check next image in folder85if k == ord('n'):86i += 187original = cv2.imread(files[i%len(files)])88original = cv2.resize(original,(rsize,rsize))89show = True9091# check previous image in folder92elif k == ord('p'):93i -= 194original = cv2.imread(files[i%len(files)])95original = cv2.resize(original,(rsize,rsize))96show = True97# Close all windows when 'esc' key is pressed98elif k == 27:99break100101if show: # If there is any event on the trackbar102show = False103104# Get values from the BGR trackbar105BMin = cv2.getTrackbarPos('BGRBMin','SelectBGR')106GMin = cv2.getTrackbarPos('BGRGMin','SelectBGR')107RMin = cv2.getTrackbarPos('BGRRMin','SelectBGR')108BMax = cv2.getTrackbarPos('BGRBMax','SelectBGR')109GMax = cv2.getTrackbarPos('BGRGMax','SelectBGR')110RMax = cv2.getTrackbarPos('BGRRMax','SelectBGR')111minBGR = np.array([BMin, GMin, RMin])112maxBGR = np.array([BMax, GMax, RMax])113114# Get values from the HSV trackbar115HMin = cv2.getTrackbarPos('HMin','SelectHSV')116SMin = cv2.getTrackbarPos('SMin','SelectHSV')117VMin = cv2.getTrackbarPos('VMin','SelectHSV')118HMax = cv2.getTrackbarPos('HMax','SelectHSV')119SMax = cv2.getTrackbarPos('SMax','SelectHSV')120VMax = cv2.getTrackbarPos('VMax','SelectHSV')121minHSV = np.array([HMin, SMin, VMin])122maxHSV = np.array([HMax, SMax, VMax])123124# Get values from the LAB trackbar125LMin = cv2.getTrackbarPos('LABLMin','SelectLAB')126AMin = cv2.getTrackbarPos('LABAMin','SelectLAB')127BMin = cv2.getTrackbarPos('LABBMin','SelectLAB')128LMax = cv2.getTrackbarPos('LABLMax','SelectLAB')129AMax = cv2.getTrackbarPos('LABAMax','SelectLAB')130BMax = cv2.getTrackbarPos('LABBMax','SelectLAB')131minLAB = np.array([LMin, AMin, BMin])132maxLAB = np.array([LMax, AMax, BMax])133134# Get values from the YCrCb trackbar135YMin = cv2.getTrackbarPos('YMin','SelectYCB')136CrMin = cv2.getTrackbarPos('CrMin','SelectYCB')137CbMin = cv2.getTrackbarPos('CbMin','SelectYCB')138YMax = cv2.getTrackbarPos('YMax','SelectYCB')139CrMax = cv2.getTrackbarPos('CrMax','SelectYCB')140CbMax = cv2.getTrackbarPos('CbMax','SelectYCB')141minYCB = np.array([YMin, CrMin, CbMin])142maxYCB = np.array([YMax, CrMax, CbMax])143144# Convert the BGR image to other color spaces145imageBGR = np.copy(original)146imageHSV = cv2.cvtColor(original,cv2.COLOR_BGR2HSV)147imageYCB = cv2.cvtColor(original,cv2.COLOR_BGR2YCrCb)148imageLAB = cv2.cvtColor(original,cv2.COLOR_BGR2LAB)149150# Create the mask using the min and max values obtained from trackbar and apply bitwise and operation to get the results151maskBGR = cv2.inRange(imageBGR,minBGR,maxBGR)152resultBGR = cv2.bitwise_and(original, original, mask = maskBGR)153154maskHSV = cv2.inRange(imageHSV,minHSV,maxHSV)155resultHSV = cv2.bitwise_and(original, original, mask = maskHSV)156157maskYCB = cv2.inRange(imageYCB,minYCB,maxYCB)158resultYCB = cv2.bitwise_and(original, original, mask = maskYCB)159160maskLAB = cv2.inRange(imageLAB,minLAB,maxLAB)161resultLAB = cv2.bitwise_and(original, original, mask = maskLAB)162163# Show the results164cv2.imshow('SelectBGR',resultBGR)165cv2.imshow('SelectYCB',resultYCB)166cv2.imshow('SelectLAB',resultLAB)167cv2.imshow('SelectHSV',resultHSV)168169cv2.destroyAllWindows()170171172173