Path: blob/master/ColorSpaces/interactiveColorSegment.cpp
3118 views
#include "opencv2/opencv.hpp"1#include <iostream>2#include <cstring>34using namespace cv;5using namespace std;6// global variable to keep track of7bool show = false;8910// Create a callback for event on trackbars11void onTrackbarActivity(int pos, void* userdata){12// Just uodate the global variable that there is an event13show = true;14return;15}161718int main(int argc, char **argv)19{20int image_number = 0;21int nImages = 10;22if(argc > 1)23nImages = atoi(argv[1]);24char filename[20];25sprintf(filename,"images/rub%02d.jpg",image_number%nImages);2627Mat original = imread(filename);2829// image resize width and height30int resizeHeight = 250;31int resizeWidth = 250;32Size rsize(resizeHeight,resizeWidth);33resize(original, original, rsize);3435// position on the screen where the windows start36int initialX = 50;37int initialY = 50;3839// creating windows to display images40namedWindow("P-> Previous, N-> Next", WINDOW_AUTOSIZE);41namedWindow("SelectBGR", WINDOW_AUTOSIZE);42namedWindow("SelectHSV", WINDOW_AUTOSIZE);43namedWindow("SelectYCB", WINDOW_AUTOSIZE);44namedWindow("SelectLAB", WINDOW_AUTOSIZE);4546// moving the windows to stack them horizontally47moveWindow("P-> Previous, N-> Next", initialX, initialY);48moveWindow("SelectBGR", initialX + 1 * (resizeWidth + 5), initialY);49moveWindow("SelectHSV", initialX + 2 * (resizeWidth + 5), initialY);50moveWindow("SelectYCB", initialX + 3 * (resizeWidth + 5), initialY);51moveWindow("SelectLAB", initialX + 4 * (resizeWidth + 5), initialY);5253// creating trackbars to get values for YCrCb54createTrackbar("CrMin", "SelectYCB", 0, 255, onTrackbarActivity);55createTrackbar("CrMax", "SelectYCB", 0, 255, onTrackbarActivity);56createTrackbar("CbMin", "SelectYCB", 0, 255, onTrackbarActivity);57createTrackbar("CbMax", "SelectYCB", 0, 255, onTrackbarActivity);58createTrackbar("YMin", "SelectYCB", 0, 255, onTrackbarActivity);59createTrackbar("YMax", "SelectYCB", 0, 255, onTrackbarActivity);6061// creating trackbars to get values for HSV62createTrackbar("HMin", "SelectHSV", 0, 180, onTrackbarActivity);63createTrackbar("HMax", "SelectHSV", 0, 180, onTrackbarActivity);64createTrackbar("SMin", "SelectHSV", 0, 255, onTrackbarActivity);65createTrackbar("SMax", "SelectHSV", 0, 255, onTrackbarActivity);66createTrackbar("VMin", "SelectHSV", 0, 255, onTrackbarActivity);67createTrackbar("VMax", "SelectHSV", 0, 255, onTrackbarActivity);6869// creating trackbars to get values for BGR70createTrackbar("BMin", "SelectBGR", 0, 255, onTrackbarActivity);71createTrackbar("BMax", "SelectBGR", 0, 255, onTrackbarActivity);72createTrackbar("GMin", "SelectBGR", 0, 255, onTrackbarActivity);73createTrackbar("GMax", "SelectBGR", 0, 255, onTrackbarActivity);74createTrackbar("RMin", "SelectBGR", 0, 255, onTrackbarActivity);75createTrackbar("RMax", "SelectBGR", 0, 255, onTrackbarActivity);7677// creating trackbars to get values for LAB78createTrackbar("LMin", "SelectLAB", 0, 255, onTrackbarActivity);79createTrackbar("LMax", "SelectLAB", 0, 255, onTrackbarActivity);80createTrackbar("AMin", "SelectLAB", 0, 255, onTrackbarActivity);81createTrackbar("AMax", "SelectLAB", 0, 255, onTrackbarActivity);82createTrackbar("BMin", "SelectLAB", 0, 255, onTrackbarActivity);83createTrackbar("BMax", "SelectLAB", 0, 255, onTrackbarActivity);8485// show all images initially86imshow("SelectHSV", original);87imshow("SelectYCB", original);88imshow("SelectLAB", original);89imshow("SelectBGR", original);9091// declare local variables92int BMin, GMin, RMin;93int BMax, GMax, RMax;94Scalar minBGR, maxBGR;9596int HMin, SMin, VMin;97int HMax, SMax, VMax;98Scalar minHSV, maxHSV;99100int LMin, aMin, bMin;101int LMax, aMax, bMax;102Scalar minLab, maxLab;103104int YMin, CrMin, CbMin;105int YMax, CrMax, CbMax;106Scalar minYCrCb, maxYCrCb;107108Mat imageBGR, imageHSV, imageLab, imageYCrCb;109Mat maskBGR, maskHSV, maskLab, maskYCrCb;110Mat resultBGR, resultHSV, resultLab, resultYCrCb;111112char k;113while (1){114imshow("P-> Previous, N-> Next", original);115k = waitKey(1) & 0xFF;116//Check next image in the folder117if (k =='n')118{119image_number++;120sprintf(filename,"images/rub%02d.jpg",image_number%nImages);121original = imread(filename);122resize(original,original,rsize);123show = true;124}125//Check previous image in he folder126else if (k =='p')127{128image_number--;129sprintf(filename,"images/rub%02d.jpg",image_number%nImages);130original = imread(filename);131resize(original,original,rsize);132show = true;133}134135// Close all windows when 'esc' key is pressed136if (k == 27){137break;138}139140if (show) { //If there is any event on the trackbar141show = false;142143// Get values from the BGR trackbar144BMin = getTrackbarPos("BMin", "SelectBGR");145GMin = getTrackbarPos("GMin", "SelectBGR");146RMin = getTrackbarPos("RMin", "SelectBGR");147148BMax = getTrackbarPos("BMax", "SelectBGR");149GMax = getTrackbarPos("GMax", "SelectBGR");150RMax = getTrackbarPos("RMax", "SelectBGR");151152minBGR = Scalar(BMin, GMin, RMin);153maxBGR = Scalar(BMax, GMax, RMax);154155// Get values from the HSV trackbar156HMin = getTrackbarPos("HMin", "SelectHSV");157SMin = getTrackbarPos("SMin", "SelectHSV");158VMin = getTrackbarPos("VMin", "SelectHSV");159160HMax = getTrackbarPos("HMax", "SelectHSV");161SMax = getTrackbarPos("SMax", "SelectHSV");162VMax = getTrackbarPos("VMax", "SelectHSV");163164minHSV = Scalar(HMin, SMin, VMin);165maxHSV = Scalar(HMax, SMax, VMax);166167// Get values from the LAB trackbar168LMin = getTrackbarPos("LMin", "SelectLAB");169aMin = getTrackbarPos("AMin", "SelectLAB");170bMin = getTrackbarPos("BMin", "SelectLAB");171172LMax = getTrackbarPos("LMax", "SelectLAB");173aMax = getTrackbarPos("AMax", "SelectLAB");174bMax = getTrackbarPos("BMax", "SelectLAB");175176minLab = Scalar(LMin, aMin, bMin);177maxLab = Scalar(LMax, aMax, bMax);178179// Get values from the YCrCb trackbar180YMin = getTrackbarPos("YMin", "SelectYCB");181CrMin = getTrackbarPos("CrMin", "SelectYCB");182CbMin = getTrackbarPos("CbMin", "SelectYCB");183184YMax = getTrackbarPos("YMax", "SelectYCB");185CrMax = getTrackbarPos("CrMax", "SelectYCB");186CbMax = getTrackbarPos("CbMax", "SelectYCB");187188minYCrCb = Scalar(YMin, CrMin, CbMin);189maxYCrCb = Scalar(YMax, CrMax, CbMax);190191// Convert the BGR image to other color spaces192original.copyTo(imageBGR);193cvtColor(original, imageHSV, COLOR_BGR2HSV);194cvtColor(original, imageYCrCb, COLOR_BGR2YCrCb);195cvtColor(original, imageLab, COLOR_BGR2Lab);196197// Create the mask using the min and max values obtained from trackbar and apply bitwise and operation to get the results198inRange(imageBGR, minBGR, maxBGR, maskBGR);199resultBGR = Mat::zeros(original.rows, original.cols, CV_8UC3);200bitwise_and(original, original, resultBGR, maskBGR);201202inRange(imageHSV, minHSV, maxHSV, maskHSV);203resultHSV = Mat::zeros(original.rows, original.cols, CV_8UC3);204bitwise_and(original, original, resultHSV, maskHSV);205206inRange(imageYCrCb, minYCrCb, maxYCrCb, maskYCrCb);207resultYCrCb = Mat::zeros(original.rows, original.cols, CV_8UC3);208bitwise_and(original, original, resultYCrCb, maskYCrCb);209210inRange(imageLab, minLab, maxLab, maskLab);211resultLab = Mat::zeros(original.rows, original.cols, CV_8UC3);212bitwise_and(original, original, resultLab, maskLab);213214// Show the results215imshow("SelectBGR", resultBGR);216imshow("SelectYCB", resultYCrCb);217imshow("SelectLAB", resultLab);218imshow("SelectHSV", resultHSV);219}220}221destroyAllWindows();222return 0;223}224225