图片处理代码(针对识别前的图片进行处理)

要点:

  • 图片处理汇总


1 代码实现ps魔棒工具,取图片中颜色数值相近的区域

详细代码实现: 可以使用python中的pillow和opencv库去实现图像的读取和处理。 需要把图片转化为像素点的矩阵,然后分析颜色值。 可以使用聚类算法去把像素点分成几个颜色簇,然后分析它们的颜色值相似度,决定哪些簇应该被合并。 在合并像素点之后,再把它们转化为图片,输出结果。

import cv2
from sklearn.cluster import KMeans
from PIL import Image
# 读取图片
img = cv2.imread('image.jpg')

# 转化为RGB模式
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 将图片转化为像素点的矩阵
pixels = img.reshape((-1, 3))

# 聚类算法
kmeans = KMeans(n_clusters=10)
kmeans.fit(pixels)

# 获取聚类的中心
colors = kmeans.cluster_centers_

# 计算相似度,合并颜色簇
tolerance = 50
merged = []
for i, color in enumerate(colors):
    similar = False
    for j, merged_color in enumerate(merged):
        if abs(color[0] - merged_color[0]) < tolerance \
                and abs(color[1] - merged_color[1]) < tolerance \
                and abs(color[2] - merged_color[2]) < tolerance:
            merged[j] = (
                (color[0] + merged_color[0]) / 2,
                (color[1] + merged_color[1]) / 2,
                (color[2] + merged_color[2]) / 2,
            )
            similar = True
            break
    if not similar:
        merged.append(color)

# 将像素点转化为聚类后的颜色
for i, pixel in enumerate(pixels):
    for j, color in enumerate(colors):
        if abs(pixel[0] - color[0]) < tolerance \
                and abs(pixel[1] - color[1]) < tolerance \
                and abs(pixel[2] - color[2]) < tolerance:
            pixels[i] = merged[j]
            break
# 将像素点转化为图片
new_img = Image.fromarray(pixels.reshape(img.shape))

# 显示结果
new_img.show()

# 保存结果
new_img.save('output.jpg')

  

2 使用cv2详细代码实现: 根据图片黄色像素值的大小将图片高于平均值的像素点设置为白色,低于平均值的像素点设置为黑色

import cv2
import numpy as np
# 读取图片,并将像素值转换为HSV颜色空间
img = cv2.imread('image.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 将HSV图像拆分成三个通道
h, s, v = cv2.split(hsv)

# 计算黄色像素点的掩膜
yellow_lower = np.array([20, 100, 100], dtype=np.uint8)
yellow_upper = np.array([30, 255, 255], dtype=np.uint8)
yellow_mask = cv2.inRange(hsv, yellow_lower, yellow_upper)

# 计算图像平均亮度,并将高于平均值的像素点设置为白色,低于平均值的像素点设置为黑色
mean_value = np.mean(v)
white_value = 255
black_value = 0
result = np.zeros_like(v)
result[v > mean_value] = white_value
result[v <= mean_value] = black_value
# 将黄色像素点的掩膜与平均亮度的结果合并
result = cv2.bitwise_and(result, yellow_mask)

# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果 还可以

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值