如何用Python OpenCV将提取的绿色区域统一为相同颜色
解决方案
你当前代码的cv2.bitwise_and操作仅将非绿色区域像素置为0,绿色区域保留了原图的原始像素值,因此原本深浅不同的绿色会被保留,自然出现颜色不一致的问题。你只需要在得到绿色掩码后,将掩码覆盖的区域统一赋值为指定颜色即可,修改后的完整代码如下:
import numpy as np import cv2 img = cv2.imread('test_img.jpg') height, width = img.shape[:2] img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 修正原参数多余的第四位,HSV为3通道格式 lower_green = (35,45,0) upper_green = (80, 255, 255) img_mask = cv2.inRange(img_hsv, lower_green, upper_green) # 方式1:保留原图背景,仅将识别到的绿色区域替换为统一绿色 img_result = img.copy() # 括号内为BGR格式的颜色值,可自行调整数值获得想要的统一绿色 img_result[img_mask > 0] = (0, 255, 0) # 方式2:和原输出逻辑一致,背景为黑,仅显示统一绿色的识别区域,可替换上方代码使用 # img_result = np.zeros_like(img) # img_result[img_mask > 0] = (0, 255, 0) cv2.imshow('color',img_result) cv2.waitKey(0) cv2.destroyAllWindows()
如果需要调整统一绿色的深浅、色调,直接修改(0,255,0)这组BGR数值即可,三个值分别对应蓝色、绿色、红色通道的亮度,取值范围为0-255。
内容的提问来源于stack exchange,提问作者Pupba
相关产品推荐
相关产品推荐

