由于java库可以在scala中使用;所以你可以使用 java 库 [javax imageIO] 或 [java awt] 或两者。你可以在互联网上找到很多他们的例子。我在这里分享一个。
以下是相同的示例代码。
import org.opencv.core.Mat
import javax.imageio.ImageIO
import java.io.ByteArrayInputStream
import java.awt.image.DataBufferByte
import org.opencv.core.CvType
import org.opencv.core.Core
import org.opencv.features2d.FeatureDetector
import org.opencv.core.MatOfKeyPoint
import org.opencv.features2d.Features2d
import org.opencv.highgui.Highgui
import java.awt.image.BufferedImage
import java.io.File
object OpenCVOps {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
def imageToMat(byteArray: Array[Byte]): MatSer ={
val bufferedImage = ImageIO.read(new ByteArrayInputStream(byteArray))
val mat = new Mat(bufferedImage.getHeight(), bufferedImage.getWidth(), CvType.CV_8UC3);
val data = bufferedImage.getRaster().getDataBuffer.asInstanceOf[DataBufferByte].getData();
mat.put(0, 0, data);
new MatSer(mat);
}
def matToImage(mat: Mat,file: String): Boolean ={
val imageType = BufferedImage.TYPE_3BYTE_BGR;
val image = new BufferedImage(mat.cols(),mat.rows(), imageType);
val x = image.getRaster.getDataBuffer.asInstanceOf[DataBufferByte].getData
mat.get(0,0,x)
val fileName = new File("file")
ImageIO.write(image, "jpg", fileName)
}
def detectFeatures(mat: Mat)
{
val featureDetector = FeatureDetector.create(FeatureDetector.SIFT)
val matKeyPoint = new MatOfKeyPoint()
featureDetector.detect(mat,matKeyPoint)
println(mat.get(0, 0))
println(matKeyPoint.toList())
//writeToImage(mat,matKeyPoint)
}
def writeToImage(mat: Mat, matKeyPoint: MatOfKeyPoint){
val outImage = new Mat()
Features2d.drawKeypoints(mat, matKeyPoint, outImage)
Highgui.imwrite("myfile.jpg",outImage)
}
}
这里还有一个例子..
import javax.imageio.ImageIO
trait Settings {
this: com.jme3.app.SimpleApplication =>
protected val appSettings = new com.jme3.system.AppSettings(true)
Seq(
("Width", 1920)
, ("Height", 1080)
, ("BitsPerPixel", 32)
, ("Frequency", 60)
, ("DepthBits", 24)
, ("StencilBits", 0)
, ("Samples", 2)
, ("Fullscreen", false)
, ("Title", "LW3D")
, ("Renderer", com.jme3.system.AppSettings.LWJGL_OPENGL2)
, ("AudioRenderer", com.jme3.system.AppSettings.LWJGL_OPENAL)
, ("DisableJoysticks", true)
, ("UseInput", true)
, ("VSync", false)
, ("FrameRate", 0)
, ("SettingsDialogImage", "")
, ("MinHeight", 1920)
, ("MinWidth", 1080)
) foreach { case (k, v: Object) => appSettings.put(k, v) }
appSettings.setIcons(
List(
ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y256.png")),
ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y128.png")),
ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y64.png")),
ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y32.png")),
ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y16.png"))
).toArray
)
setSettings(appSettings)
setShowSettings(false)
setDisplayFps(true)
setDisplayStatView(false)
setPauseOnLostFocus(false)
}