OpenCVを使って何かする、となるともうCとPythonのサンプルばかりですね。。。
ということで、今回Grailsでjpegの品質を落として容量を減らしてクライアントに返す、という方法を調べましたのでメモします。
JavaやApache GroovyでOpenCVを利用するための環境構築はこちらをどうぞ。 ---> Java、Apache Groovy、GrailsでOpenCVを利用する方法

import org.opencv.core.Mat
import org.opencv.core.MatOfByte
import org.opencv.core.MatOfInt
import org.opencv.imgcodecs.Imgcodecs

clas HogeController {
    def index() {
        // 読み込み
        Mat jpg = Imgcodecs.imread("JEPGファイルのフルパス")

        // 結果を格納するMat
        MatOfByte encoded = new MatOfByte()

        // JPEG品質を表すMatOfIntを作成
        // 以下は品質を20と指定している。オリジナルは100。
        MatOfInt quality = new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY, 20)

        // エンコード(これで実際に品質が落ちたjpegの値がMatOfByteインスタンスに格納される)
        Imgcodecs.imencode(".jpg", jpg, encoded, quality)

        // 以下はGrailsから圧縮した画像をそのまま返す場合。
        // MatOfArray#toArray()はbyte[]を返すので、それを使えばもう後はだたのJava(Groovy)の話。
        render file: encoded.toArray(), contentType: "image/jpeg"
    }
}