0

画像の全体的な彩度を増減する関数のペアを作成しようとしています。「彩度」とは本質的に「グレーから離れている、またはグレーに近い」ことを意味することを理解しているため、RGB チャンネルを増減する必要がありますが、すべてを均等に行うことはできません (つまり、r * 2、g * 2、b * 2) 画像が明るくなるだけなので。

http://www.georeference.org/doc/colors_as_hue_saturation_and_brightness.htmの式を使用しようとし ましたが、コードで使用しようとすると、画像はほぼ完全に黒く、黄色の斑点がいくつかあります。

これが私がこれまでに試したことです:

def upSaturation(pictu):
   '''Takes a picture and increases the overall color saturation'''
   satuP = duplicatePicture(pictu)
   for pixel in getPixels(satuP):
   r = getRed(pixel)
   g = getGreen(pixel)
   b = getBlue(pixel)
   mn = min(r, g, b)
   mx = max(r, g, b)
   lht = (mx + mn) / 2
   if lht <= 128:
     satu = 255 * ((mx - mn) / (mx + mn))
     clr = makeColor(r * satu, g * satu, b * satu)
     setColor(pixel, clr)
   else:
     sat = 255 * ((mx - mn) / (511 - (mx + mn)))
     color = makeColor(r * sat, g * sat, b * sat)
     setColor(pixel, color)
 show(satuP)
 return satuP

私も makeColor(sat, sat, sat) だけを試してみましたが、それは完全に黒く、いくつかの白い斑点がありました。この時点で他に何をすべきかわかりません。いくつかのガイダンスをいただければ幸いです。

4

1 に答える 1

1

彩度を上げるには、原色の値を上げる必要があります。たとえば、ピクセルが主に赤の場合、ピクセルの赤のコンテンツを増やし、残りを減らす必要があります。

def upSaturation(pictu): 
'''Takes a picture and increases the overall color saturation'''
 satuP = duplicatePicture(pictu)
 for pixel in getPixels(satuP):
  r = getRed(pixel)
  g = getGreen(pixel)
  b = getBlue(pixel)
  # check if red is primary colour
  if r > g and r > b:
   # Saturate with red
   r = r + 5
   if g < b:
     g = g - 5
   else:
     b = b - 5

  # check if green is primary colour
  if g > r and g > b:
   # Saturate with green
   g = g + 5
   if r < b:
     r = r - 5
   else:
     b = b - 5

  # check if blue is primary colour
  if b > r and b > g:
   # Saturate with blue
   b = b + 5
   if r < g:
     r = r - 5
   else:
     g = g - 5

 color = makeColor(r, g, b)
 setColor(pixel, color)
 explore(satuP)
 return satuP
于 2014-11-29T02:47:39.330 に答える