簡體   English   中英

檢測灰度圖像的某些像素

[英]Detection of certain pixels of a grayscale image

我有這段代碼可以讓你檢測一個 vertain 值的像素。 現在我正在檢測超過某個值 (27) 的像素。 我的想法是仍然檢測它們但檢測另一個像素值(我想檢測從 65 到 75 的像素,另一個像素間隔)。 我怎樣才能做到這一點?

如您所見,T 正在檢測灰度圖像,因此我對紅色、綠色和藍色具有相同的值。

任何改進此程序以加快工作速度的想法都將不勝感激。 比如使用 os.walk 引入 Daytime 文件夾中的所有圖像,我真的不知道該怎么做。

謝謝。

daytime_images = os.listdir("D:/TR/Daytime/")
number_of_day_images = len(daytime_images)
day_value = 27

def find_RGB_day(clouds, red, green, blue): 
    img = Image.open(clouds) 
    img = img.convert('RGB') 
    pixels_single_photo = [] 
    for x in range(img.size[0]): 
        for y in range(img.size[1]): 
            h, s, v, = img.getpixel((x, y)) 
            if h <= red and s <= green and v <= blue:
                pixels_single_photo.append((x,y)) 
    return pixels_single_photo

number = 0

for _ in range(number_of_day_images):
    world_image = ("D:/TR/Daytime/" + daytime_images[number])
    pixels_found = find_RGB_day(world_image, day_value, day_value, day_value)
    coordinates.append(pixels_found)
    number = number+1

一些想法:

  • 如果,正如你所說,你的圖像是灰度的,那么你應該將它們作為單通道灰度圖像處理,而不是不必要地將它們的 memory 足跡增加三倍,並通過將它們提升為 RGB 來將你需要進行的比較次數增加三倍

  • 與其使用在 Python 中速度非常慢的嵌套for循環,不如使用NumpyOpenCV來獲得 10 到 1000 倍的加速。 類似的例子在這里

  • 如果你有很多圖像要處理,它們都是獨立的,並且你有一個不錯的 CPU 和 RAM,考慮使用多處理來讓你所有可愛的內核並行處理圖像。 簡單的例子在這里


第二個建議最有可能產生最好的紅利,所以我將擴展它:

from PIL import Image
import Numpy as np

# Open an image and ensure greyscale
im = Image.open('image.png').convert('L')

# Make into Numpy array
na = np.array(im)

# Make a new array that is True where pixels between 65..75 and False elsewhere
x = np.logical_and(na>65,na<75)

# Now count the True pixels
result = np.count_nonzero(x)

這張 400x100 的圖像產生 2,200:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM