2017-11-09 4 views
0
import java.io.File 
import javax.imageio.ImageIO 
import java.awt.image.BufferedImage 

val img = ImageIO.read(newFile("Filename.jpg")) 

val w = img.getWidth 
val h = img.getHeight 

for (x <- 0 until w) 
    for (y <- 0 until h) 
    img.getRGB(x,y) 

ImageIO.write(img,"jpg",new File("test.jpg")) 

imgをバイト配列に変換し、それに緑のピクセルを数える方法。イメージ(.jpg)をスカラーの配列に変換する方法と、同じ配列内の緑のピクセルをスカラを使用して数える方法

答えて

0

各ピクセルのRGB値を緑色のRGB値と比較することで、緑色ピクセルをカウントできます。 例:

... 
    val w = img.getWidth 
    val h = img.getHeight 

    val green = Color.GREEN 

    var ctrGreen = 0 
    var ctrTotal = 0 
    for (x <- 0 until w) 
     for (y <- 0 until h) { 
     val c = new Color(img.getRGB(x, y)) 
     if (isEqual(c, green)) { 
      ctrGreen += 1 
     } 
     ctrTotal += 1; 
     } 

    println("Green pixel count: " + ctrGreen) 
    println("Total pixel count: " + ctrTotal) 
    } 

    def isEqual(c1: Color, c2: Color): Boolean = { 
    c1.getRed == c2.getRed && c1.getBlue == c2.getBlue && c1.getGreen == c2.getGreen 
    } 

しかし、いつか、(すなわち、緑色の場合には、それが(0,255,0)である)色のRGB値の正確な一致を見つけることは困難です。したがって、ピクセルがカラー範囲に属しているかどうかを確認することもできます。例:

.... 
    val lightGreen = new Color(0,255,0) 
    val darkGreen = new Color(0,100,0) 

    var ctrGreen = 0 
    var ctrTotal = 0 
    for (x <- 0 until w) 
     for (y <- 0 until h) { 
     val c = new Color(img.getRGB(x, y)) 
     if (isBetween(c, lightGreen,darkGreen)) { 
      ctrGreen += 1 
     } 
     ctrTotal += 1; 
     } 

    println("Green pixel count: " + ctrGreen) 
    println("Total pixel count: " + ctrTotal) 
    } 

    def isBetween(c: Color, c1: Color, c2: Color): Boolean = { 
    c.getRed >= c1.getRed && c.getRed <= c2.getRed && c.getBlue >= c1.getBlue && c.getBlue <= c2.getBlue && c.getGreen <= c1.getGreen && c.getGreen >= c2.getGreen 
    } 
関連する問題