图片处理代码(针对识别前的图片进行处理)"/>
图片处理代码(针对识别前的图片进行处理)
要点:
- 图片处理汇总
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 = Falsefor 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 = Truebreakif 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()
效果 还可以
更多推荐
图片处理代码(针对识别前的图片进行处理)
发布评论