Python 从图像中获取颜色并表示它
我想知道X颜色是否出现在图像中。在这种情况下,研究的颜色将为绿色,因此其RGB值为(0.255.0) 我应用以下代码:Python 从图像中获取颜色并表示它,python,python-3.x,opencv,Python,Python 3.x,Opencv,我想知道X颜色是否出现在图像中。在这种情况下,研究的颜色将为绿色,因此其RGB值为(0.255.0) 我应用以下代码: img=cv2.imread('img.jpg') L1=[0,255,0] 匹配=np.all(img==L1,轴=2) 结果=np.类零(img) 打印(result.any()) 结果[匹配]=[255,0,255] cv2.imwrite('resultado.jpg',result) 基本上: 我加载要分析的图像 我描述了我想要获得的RGB值 我检查此颜色(绿色)是
img=cv2.imread('img.jpg')
L1=[0,255,0]
匹配=np.all(img==L1,轴=2)
结果=np.类零(img)
打印(result.any())
结果[匹配]=[255,0,255]
cv2.imwrite('resultado.jpg',result)
基本上:
谢谢大家! 问题的原因是,绿色区域不是仅从
[0,255,0]
构建的,正如您所想,OT21t.jpg
是您的输入图像,当我这样做时:
import cv2
img = cv2.imread('OT21t.jpg')
print(img[950,1300])
我得到了
[22551]
,所以它不是[0255,0]
。请记住,当保存.jpg
图像时,通常是有损过程-部分数据可能会被丢弃,从而允许更小的文件大小(有关搜索有损压缩的详细信息,请参见)。以下是一个脚本,它可以满足您的需要,我也使用了numpy,因此它不会很难适应您的需要
此脚本将找到一种颜色并替换为另一种颜色:
import numpy
from PIL import Image
im = numpy.array(Image.open("/path/to/img.jpg"))
tol = 4 # tolerence (0 if you want an exact match)
target_color = [0, 255, 0, 255] # color to change
replace_color = [255, 0, 255, 255] # color to use to paint the zone
for y, line in enumerate(im):
for x, px in enumerate(line):
if all((abs(px[i] - target_color[i]) < tol for i in range(3))):
im[y][x] = replace_color
Image.fromarray(im).save("./Desktop/img.png")
导入numpy
从PIL导入图像
im=numpy.array(Image.open(“/path/to/img.jpg”))
tol=4#公差(如果需要精确匹配,则为0)
目标颜色=[0,255,0,255]#要更改的颜色
替换_color=[255,0,255,255]#用于绘制分区的颜色
对于y,枚举(im)中的行:
对于枚举中的x,px(第行):
如果所有((abs(px[i]-target_color[i])
此款为黑色,仅与替换色匹配:
import numpy
from PIL import Image
im = numpy.array(Image.open("/path/to/img.jpg"))
new_im = numpy.zeros_like(im)
tol = 4 # tolerence (0 if you want an exact match)
target_color = [0, 255, 0, 255] # color to change
replace_color = [255, 0, 255, 255] # color to use to paint the zone
for y, line in enumerate(im):
for x, px in enumerate(line):
if all((abs(px[i] - target_color[i]) < tol for i in range(3))):
new_im[y][x] = replace_color
Image.fromarray(new_im).save("./Desktop/img.png")
导入numpy
从PIL导入图像
im=numpy.array(Image.open(“/path/to/img.jpg”))
new_im=numpy.zero_like(im)
tol=4#公差(如果需要精确匹配,则为0)
目标颜色=[0,255,0,255]#要更改的颜色
替换_color=[255,0,255,255]#用于绘制分区的颜色
对于y,枚举(im)中的行:
对于枚举中的x,px(第行):
如果所有((abs(px[i]-target_color[i])
脚本中缺少的是一些公差,因为您的绿色可能不是完美的绿色。我通常更适合使用“色调、饱和度和亮度”系统而不是RGB来分离图像中的颜色-请参阅
所以你可以考虑这样的事情:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Open image and make RGB and HSV versions
RGBim = Image.open("seaside.jpg")
HSVim = RGBim.convert('HSV')
# Make numpy versions
RGBna = np.array(RGBim)
HSVna = np.array(HSVim)
# Extract Hue
H = HSVna[:,:,0]
# Find all green pixels, i.e. where 110 < Hue < 130
lo,hi = 110,130
# Rescale to 0-255, rather than 0-360 because we are using uint8
lo = int((lo * 255) / 360)
hi = int((hi * 255) / 360)
green = np.where((H>lo) & (H<hi))
# Make all green pixels red in original image
RGBna[green] = [255,0,0]
count = green[0].size
print("Pixels matched: {}".format(count))
Image.fromarray(RGBna).save('result.png')
#/usr/local/bin/python3
将numpy作为np导入
从PIL导入图像
#打开图像并制作RGB和HSV版本
RGBim=Image.open(“seaside.jpg”)
HSVim=RGBim.convert('HSV')
#制作numpy版本
RGBna=np.阵列(RGBim)
HSVna=np.数组(HSVim)
#提取色调
H=HSVna[:,:,0]
#查找所有绿色像素,即110<色调<130
低,高=110130
#重新缩放到0-255,而不是0-360,因为我们使用的是uint8
lo=int((lo*255)/360)
hi=int((hi*255)/360)
绿色=np.其中((H>lo)和(H