图片降维处理

4 篇文章 0 订阅

彩色图片一个像素是有RGB3色,就算用int保存的话,一个Int 4个字节,也要12个字节,需要转换成单色灰色,这样就只需要一个数字来表示颜色了,从而降低了维度,并节约了内存

import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO

import org.apache.spark.mllib.linalg.Vectors

/**
  * Created by xiaojun on 2016/3/18.
  */
object ImageTest {
  def main(args: Array[String]): Unit = {
    val inputPath = "d:\\test.jpg"
    val width = 50
    val height = 50
    val pixels = extractPixels(inputPath, width, height)
    //将图片转换成向量表示
    val imageVector =  Vectors.dense(pixels)
    println(imageVector.toArray.take(10).mkString("",","," ,  ..."))

  }

  def loadImageFromFile(path: String) = {
    ImageIO.read(new File(path))
  }

  //降低维度,将彩色图片转变成单色灰色图片
  def processImage(image: BufferedImage, width: Int, height: Int) = {
    val grayImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY)
    val g = grayImage.getGraphics
    g.drawImage(image, 0, 0, width, height, null)
    g.dispose()
//    ImageIO.write(grayImage,"jpg",new File("d:\\gray2.jpg"))
    grayImage
  }

  //获得图片的所有像素,保存在数组中
  def getPixelsFromImage(image: BufferedImage) = {
    val width = image.getWidth
    val height = image.getHeight
    val pixels = Array.ofDim[Double](width * height)
    image.getData.getPixels(0, 0, width, height, pixels)
  }

  def extractPixels(path: String, width: Int, height: Int) = {
    val raw = loadImageFromFile(path)
    val grayImage = processImage(raw, width, height)
    getPixelsFromImage(grayImage)
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值