Usando estatísticas de imagem
E se eu quiser saber a cor média ou a cor com maior área em uma região?
Use statistics - Estatísticas!
ROI - Região de interesse
\
O formato de roi é uma tupla (x, y, w, h).
- x: coordenada x do canto superior esquerdo da região ROI
- y: coordenada y do canto superior esquerdo da região ROI
- w: largura do ROI
- h: altura do ROI
Statistics
image.get_statistics(roi=Auto)
Onde roi é a região alvo. Note que parâmetros como roi e bins devem ser marcados explicitamente, por exemplo:
img.get_statistics(roi=(0,0,10,20))
Se for img.get_statistics((0,0,10,20)), o ROI não vai funcionar.
statistics.mean retorna a média da escala de cinza (0-255) (int). Você também pode obtê-la através de statistics[0].
statistics.median retorna a mediana da escala de cinza (0-255) (int). Você também pode obtê-la através de statistics[1].
statistics.mode() retorna a moda(0-255) (int) da escala de cinza. Você também pode obtê-la via statistics[2]
statistics.stdev() Retorna o desvio padrão do valor de escala de cinza(0-255) (int). Você também pode obtê-lo via statistics[3].
statistics.min() retorna o valor mínimo da escala de cinza(0-255) (int). Você também pode obtê-lo através de statistics[4].
statistics.max retorna o valor máximo da escala de cinza (0-255) (int). Você também pode obtê-lo através de statistics[5].
statistics.lq retorna o primeiro quartil da escala de cinza (0-255) (int). Você também pode obtê-lo através de statistics[6].
statistics.uq retorna o terceiro quartil da escala de cinza (0-255) (int). Você também pode obtê-lo através de statistics[7].
O acima é o valor de escala de cinza, e a seguir
- l_mean, l_median, l_mode, l_stdev, l_min, l_max, l_lq, l_uq,
- a_mean, a_median, a_mode, a_stdev, a_min, a_max, a_lq, a_uq,
- b_mean, b_median, b_mode, b_stdev, b_min, b_max, b_lq, b_uq,
são a média, mediana, moda, desvio padrão, mínimo, máximo, primeiro quartil e terceiro quartil dos três canais LAB.
Exemplo
Detecta o valor de cor na área superior esquerda.
import csi, image, time
csi0 = csi.CSI()
csi0.reset() # inicializa a câmera
csi0.pixformat(csi.RGB565) # formato RGB565.
csi0.framesize(csi.QVGA)
csi0.snapshot(frames=10) # pula 10 quadros para que as novas configurações entrem em vigor
csi0.auto_whitebal(False) # Cria um objeto de relógio para monitorar o FPS.
ROI=(80,30,15,15)
while(True):
img = csi0.snapshot() # Tira uma foto e retorna a imagem.
statistics=img.get_statistics(roi=ROI)
color_l=statistics.l_mode
color_a=statistics.a_mode
color_b=statistics.b_mode
print(color_l,color_a,color_b)
img.draw_rectangle(ROI)
Resultado:

Terminal
56 66 51
56 66 55
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51
56 66 55
56 66 51
56 66 51
56 66 51
56 66 51
56 66 51