2017-11-27 10 views
0

어떻게이 코드 인쇄 200 세 이상 밝은 픽셀의 총 수를 어떻게해야합니까 : 지금이미지의 밝은 픽셀 수를 계산하는 방법은 무엇입니까?

from PIL import Image 
img = input("File name: ") 
img = Image.open(img); 
for y in range(img.height): 
    for x in range(img.width): 
    pixel = img.getpixel((x, y)) 
    if pixel >= 200: 
     print(pixel,"pixels are bright.") 

는 새로운 라인 (200)를 초과 모든 하나의 픽셀을 인쇄하는 것,하지만 난 그냥 한 줄을 원하는 다음과 같이 합계를 인쇄합니다.

File name: slippers.png 
121081 pixels are bright.  

답변

2

그냥 인쇄하기 전에 픽셀 수 :

from PIL import Image 
img = input("File name: ") 
img = Image.open(img); 
count = 0 
for y in range(img.height): 
    for x in range(img.width): 
    pixel = img.getpixel((x, y)) 
    if pixel >= 200: 
     count += 1 

print(count,"pixels are bright.") 
0

이 경우 루프가 필요하지 않습니다. 임계 값을 초과하는 픽셀을 반환하는 마스크를 만들고 마스크를 합칩니다. 당신은 당신이 np.array(img)과 함께 할 수있는 NumPy와 배열에 PIL Image에서 img 변환해야 NumPy와

. 그런 다음 픽셀이 임계 값을 초과 할 때마다 부울 마스크를 만듭니다 (np.array(img) >= 200). 이렇게하면 각 픽셀 위치에 True 또는 False의 이미지 크기와 동일한 크기의 배열이 기준을 충족하는지 여부가 결정됩니다. 그런 다음 결과 이미지가 np.sum() 인 경우 True을 1로, False을 0으로 변환하므로 합계는 기준에 맞는 총 픽셀 수를 제공합니다. 한 줄이 모든 :

bright_count = np.sum(np.array(img) >= 200) 

순수 PIL NumPy와를 사용하지 않는 순수 PIL 솔루션을

, 당신은 Image 클래스의 point() 방법을 사용할 수 있습니다. 방법에 대한 좋은 설명은 this question/answer을 참조하십시오. point() 메서드는 픽셀에 새 값을 할당하는 함수를 사용합니다. 여기서 임계 값을 초과 할 때마다 값 1을 할당했습니다. 그런 다음 getdata() 메서드를 사용하여 Image 유형의 데이터 만 가져 와서 파이썬 sum() 함수를 사용하여 데이터를 합산했습니다.

bright_count = sum(img.point(lambda pix: 1 if pix>=thresh else 0).getdata()) 
0

당신은 너무이 일을 시도 할 수 있습니다 (파이썬 3) :

from PIL import Image 

imgFile = input("File name: ") 
img = Image.open(imgFile); 
pixels = img.getdata() 
total = len(list(filter(lambda i: i >= (200,200,200), pixels))) 
print("There are %d bright pixels" % total) 

당신은 모든 픽셀을 적용하려면 getdata() 방법을 사용할 수 있습니다 일단 끝나면 원하는 값보다 높은 것을 필터링 할 수 있습니다. Python 2에서는 간단히 i >= 200을 쓸 수 있습니다.