免责声明:此问题与家庭作业项目有关。
我正在申请研究香蕉,并告诉它是否成熟。我已经创建了一个允许打开图像的窗口,并打开一个弹出窗口,说明点击的像素是否成熟。我将像素rgb值转换为hsv并诊断它是否成熟。
现在,我想提供整个图片的自动分析(在analyseauto
方法中)。问题是我只想要研究香蕉像素,而不是白色。我的问题是如何只选择像素的一部分,所以香蕉而不是白色背景。我可以使用getdata
执行此操作吗?
以下是相关的一段代码。
def analyseauto():
global image
listTriplets=list(image.getdata()) # list of rgb values
print(listTriplets)
#click callback
def pointeur(event):
global image
x=str(event.x)
y=str(event.y)
x1=int(x)
y1=int(y)
R,V,B=image.getpixel((x1,y1))
#convert to HSV (my T hold hue, from french "teinte")
#[...]
#update side text field
#[...]
Mûre = 0
PasMûre = 0
Pourri = 0
AnalyseManuelle = 0
PixelNoBanane = 0
x2=0
#diagnose
# m value (between 1 and 4) record pixel state
if 0<=T<=360 and 0<=S<=100 and 0<=V<=100:
if 40<= T <=56 and 50<= S <=100 and 70<= V <=100:
print("Il s'agit d'un pixel Mûre ")
Mûre = Mûre+1
x2 = x2+1
m=1
m=int(m)
if 50<= T <=100 and 70<= S <=100 and 20<= V <=70:
print("Il s'agit d'un pixel pas Mûre")
PasMûre = PasMûre+1
x2 = x2+1
m=2
m=int(m)
if 0<= T <=30 and 70<= S <=100 and 10<= V <=50:
print("Il s'agit d'un pixel Pourri")
Pourri = Pourri+1
x2 = x2+1
m=3
m=int(m)
if x2 == 0 :
print ("le pixel n'est pas compris dans les echelles definis")
PixelNoBanane = PixelNoBanane+1
m=4
m=int(m)
# display popup with plain text answer
完整的应用程序代码on gist。我用于测试的香蕉的例子: 。
答案 0 :(得分:1)
我认为使用getdata
是一种可以接受的方式来做你想做的事情,但我认为你应该首先调整你的形象。 getdata
将返回一个列表,但是以当前图片大小:
>>> banana = Image.open('banana.jpg')
>>> banana
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=847x567 at 0x2C26440>
该列表的像素值为480,249像素,这可能有点过分。
如果您将其调整为50x50:
>>> banana = banana.resize((50,50))
然后使用getdata
:
>>> banana = banana.resize((50,50))
>>> pixels = banana.getdata()
>>> len(pixels)
2500
>>> pixels = set(pixels) # remove duplicates
>>> len(pixels)
670
这似乎更易于管理。然后,只需从集合中转储(255,255,255)值,也可以转换为任何浅灰色,并获得表示要测试的颜色的平均值,并像以前一样运行测试(仅在一个像素上) RGB值)。
希望我理解正确,这有帮助。