Python替换图片上一些颜色

之前做的论文配图颜色太浅,被要求修改,但原图稿已丢失,无奈使出此招。
先找一张你要替换颜色的照片,我这个保存的PNG格式的。看 ,就是下面这只叮当猫!
替换前的图片
请添加图片描述
很重要的一个步骤,用颜色识别工具对图像的RGB区间进行观察,寻找特征。
苹果mac上使用 数码测色计,windows平台可下载其他的颜色识别软件。

上代码:

from PIL import Image
path = "/Users/xsx/Desktop/ddm.png"
img = Image.open(path)
m = img.size[0]
n = img.size[1]
c = Image.new("RGB",(m,n))
pix = img.load()
for y in range(n):
    for x in range(m):
        list = pix[x,y]
        # 判断要替换的颜色的RGB值的区间 
        # 替换后若还有一些像素点存在未替换,可使用颜色识别工具识别一下,针对性修改一下的判断区间
        if 120 >list[0] > 40 and 150>list[1]>80 and 210 >list[2]>150:
            #替换后的颜色
            c.putpixel([x,y],(20,255,255,0))  
        else:
            c.putpixel([x,y],list)
c.save("/Users/xsx/Desktop/ddm_1.png")
c.show()

替换后的图片
请添加图片描述
请添加图片描述
图片来网络,若有侵权,请联系本人删除,抱歉!

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要识别一张图片中有几种颜色,可以使用OpenCV和Python。以下是一种实现方法: 1. 读取图像并将其转换为HSV颜色空间。 ```python import cv2 img = cv2.imread('image.jpg') hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) ``` 2. 定义颜色范围。在HSV颜色空间中,每种颜色都有一个特定的H(色调),S(饱和度)和V(明度)值。通过调整这些值,可以定义特定颜色的范围。 ```python # 颜色范围 # 红色 lower_red = np.array([0, 100, 100]) upper_red = np.array([10, 255, 255]) lower_red2 = np.array([160, 100, 100]) upper_red2 = np.array([179, 255, 255]) # 绿色 lower_green = np.array([35, 43, 46]) upper_green = np.array([77, 255, 255]) # 蓝色 lower_blue = np.array([100, 43, 46]) upper_blue = np.array([124, 255, 255]) ``` 3. 使用cv2.inRange()函数将图像中的像素值限制在指定的颜色范围内。这将创建一个蒙版,其中包含指定颜色的像素为白色,其他像素为黑色。 ```python # 红色 mask_red = cv2.inRange(hsv_img, lower_red, upper_red) mask_red2 = cv2.inRange(hsv_img, lower_red2, upper_red2) mask_red = cv2.addWeighted(mask_red, 1.0, mask_red2, 1.0, 0.0) # 绿色 mask_green = cv2.inRange(hsv_img, lower_green, upper_green) # 蓝色 mask_blue = cv2.inRange(hsv_img, lower_blue, upper_blue) ``` 4. 对蒙版应用cv2.bitwise_or()函数,以便将所有颜色的像素组合到一个图像中。 ```python # 通过位或操作将三个蒙版合并成一个图像 mask = cv2.bitwise_or(mask_red, mask_green, mask_blue) ``` 5. 使用cv2.findContours()函数查找图像中的轮廓。在此步骤中,可以通过指定轮廓面积的最小值来过滤掉不需要的轮廓。 ```python # 查找轮廓 contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 过滤掉面积较小的轮廓 min_area = 50 contours = [c for c in contours if cv2.contourArea(c) > min_area] ``` 6. 最后,可以通过len()函数计算检测到的颜色数量。 ```python # 计算颜色数量 num_colors = len(contours) print(f'图像中检测到了{num_colors}种颜色。') ``` 这就是用OpenCV和Python识别一张图片中有几种颜色的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值