修改文件夹名字
This commit is contained in:
57
视觉代码python/image_preprocessor.py
Normal file
57
视觉代码python/image_preprocessor.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
class ImagePreprocessor:
|
||||
"""图像预处理:分离目标颜色并生成掩码"""
|
||||
@staticmethod
|
||||
def process_red_light(frame):
|
||||
"""红色灯条预处理"""
|
||||
red_only = frame.copy()
|
||||
red_only[:, :, 0] = 0 # B=0
|
||||
red_only[:, :, 1] = 0 # G=0
|
||||
|
||||
hsv = cv2.cvtColor(red_only, cv2.COLOR_BGR2HSV)
|
||||
v_mask = cv2.inRange(hsv[:, :, 2], 70, 190)
|
||||
|
||||
kernel_close = np.ones((7, 7), np.uint8)
|
||||
kernel_dilate = np.ones((2, 2), np.uint8)
|
||||
mask = cv2.morphologyEx(v_mask, cv2.MORPH_CLOSE, kernel_close)
|
||||
mask = cv2.dilate(mask, kernel_dilate, iterations=1)
|
||||
|
||||
kernel = np.ones((4, 4), np.uint8)
|
||||
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
|
||||
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)
|
||||
mask = cv2.dilate(mask, kernel, iterations=1)
|
||||
|
||||
return mask, red_only
|
||||
|
||||
@staticmethod
|
||||
def process_blue_light(frame):
|
||||
"""蓝色灯条预处理"""
|
||||
blue_only = frame.copy()
|
||||
blue_only[:, :, 1] = 0 # G=0
|
||||
blue_only[:, :, 2] = 0 # R=0
|
||||
|
||||
hsv = cv2.cvtColor(blue_only, cv2.COLOR_BGR2HSV)
|
||||
v_mask = cv2.inRange(hsv[:, :, 2], 120, 230)
|
||||
|
||||
kernel_close = np.ones((7, 7), np.uint8)
|
||||
kernel_dilate = np.ones((2, 2), np.uint8)
|
||||
mask = cv2.morphologyEx(v_mask, cv2.MORPH_CLOSE, kernel_close)
|
||||
mask = cv2.dilate(mask, kernel_dilate, iterations=1)
|
||||
|
||||
kernel = np.ones((4, 4), np.uint8)
|
||||
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
|
||||
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)
|
||||
mask = cv2.dilate(mask, kernel, iterations=1)
|
||||
|
||||
return mask, blue_only
|
||||
|
||||
def get_mask(self, frame, target_color):
|
||||
"""根据颜色选择预处理逻辑"""
|
||||
if target_color == "red":
|
||||
return self.process_red_light(frame)
|
||||
elif target_color == "blue":
|
||||
return self.process_blue_light(frame)
|
||||
else:
|
||||
raise ValueError("仅支持 'red' 或 'blue'")
|
||||
Reference in New Issue
Block a user