diff --git a/Q2main.py b/Q2main.py
index 4fcbdedd85828810da83c88c7e9dab2e61a0e4e1..e23637a811531ddba555ae6ce90e5a08f18d9217 100644
--- a/Q2main.py
+++ b/Q2main.py
@@ -6,6 +6,7 @@ class ImageProcessor:
     def __init__(self, image_path):
         self.image = cv2.imread(image_path)
         self.image_rgb = cv2.cvtColor(self.image, cv2.COLOR_BGR2RGB)
+        self.image_hsv = cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV)
 
     def apply_median_filter(self, kernel_size = 5):
         filtered_image = cv2.medianBlur(self.image_rgb,kernel_size)
@@ -18,20 +19,34 @@ class ImageProcessor:
         return red_channel, green_channel, blue_channel
     
     def convert_to_hsv(self):
-        hsv_image =cv2.cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV)
+        return cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV)
+        
 
     def calculate_snr(self, channel):
         mean = np.mean(channel)
         stddev = np.std(channel)
         snr = mean / stddev
         return snr 
-
     
+    def get_color_masks(self):
+        lower_red1 = np.array([0, 100, 100])
+        upper_red1 = np.array([10, 255, 255])
+        lower_red2 = np.array([170, 100, 100])
+        upper_red2 = np.array([180, 255, 255])
+
+        lower_yellow = np.array([22, 100, 100])
+        upper_yellow = np.array([32, 255, 255])
+
+        lower_green = np.array([45, 100, 100])
+        upper_green = np.array([72, 255, 255])
+
+        red_mask = cv2.inRange(self.image_hsv, lower_red1, upper_red1) | cv2.inRange(self.image_hsv, lower_red2, upper_red2)
+        yellow_mask =cv2.inRange(self.image_hsv, lower_yellow, upper_yellow)
+        green_mask = cv2.inRange(self.image_hsv, lower_green, upper_green)
+
+        return red_mask, yellow_mask, green_mask
     
 class Plotter:
-    @staticmethod
-    def __init__(self):
-        pass
 
     @staticmethod
     def plot_image_channels(image, red, green, blue):
@@ -53,7 +68,7 @@ class Plotter:
         axes[1,1].set_title("blue channel")
         axes[1,1].axis("off")    
 
-        #plt.show()
+        plt.show()
     @staticmethod
     def plot_histograms(red, green ,blue):
         fig, axes = plt.subplots(1,3, figsize =(15,5))
@@ -73,7 +88,7 @@ class Plotter:
         axes[2].set_xlabel('Pixel Intensity')
         axes[2].set_ylabel('Frequency')
 
-        #plt.show()
+        plt.show()
 
     @staticmethod
     def plot_filtered_image(original, filtered):
@@ -89,10 +104,30 @@ class Plotter:
 
         plt.show()
 
+    @staticmethod
+    def plot_color_masks(image, red_mask, yellow_mask, green_mask):
+        fig, axes = plt.subplots(1, 3, figsize = (18,6))
+
+        axes[0].imshow(red_mask, cmap='gray')
+        axes[0].set_title("Red Mask")
+        axes[0].axis("off")
+
+        axes[1].imshow(yellow_mask, cmap='gray')
+        axes[1].set_title("Yellow Mask")
+        axes[1].axis("off")
+
+        axes[2].imshow(green_mask, cmap='gray')
+        axes[2].set_title("Green Mask")
+        axes[2].axis("off")
+
+        plt.show()
+
 image_path = "traffic_light_image_1.png"
 processor = ImageProcessor(image_path)
 red, green, blue = processor.get_color_channels()
 
+red_mask, yellow_mask, green_mask = processor.get_color_masks()
+
 snr_red = processor.calculate_snr(red)
 snr_green = processor.calculate_snr(green)
 snr_blue = processor.calculate_snr(blue)
@@ -104,6 +139,8 @@ snr_blue = processor.calculate_snr(blue)
 filtered_image = processor.apply_median_filter(kernel_size = 5)
 
 
-Plotter.plot_image_channels(processor.image_rgb,red,green,blue)
-Plotter.plot_histograms(red, green, blue)
-Plotter.plot_filtered_image(processor.image_rgb, filtered_image)
\ No newline at end of file
+#Plotter.plot_image_channels(processor.image_rgb,red,green,blue)
+#Plotter.plot_histograms(red, green, blue)
+#Plotter.plot_filtered_image(processor.image_rgb, filtered_image)
+Plotter.plot_color_masks(processor.image_rgb, red_mask, yellow_mask, green_mask)
+print(processor.image.shape)
\ No newline at end of file