package network.rs485.ben.computervision import network.rs485.ben.computervision.CvContext.withMat import org.opencv.core.CvType import org.opencv.core.Mat import org.opencv.core.Scalar import org.opencv.imgproc.Imgproc internal val COLOR_BLACK = Scalar(0.0, 0.0, 0.0, 255.0) internal val COLOR_WHITE = Scalar(255.0, 255.0, 255.0, 255.0) internal val COLOR_RED = Scalar(0.0, 0.0, 180.0, 255.0) internal val COLOR_GREEN = Scalar(0.0, 255.0, 0.0, 255.0) internal val COLOR_BLUE = Scalar(255.0, 0.0, 0.0, 255.0) internal val COLOR_YELLOW = Scalar(0.0, 240.0, 255.0, 255.0) internal operator fun Scalar.plus(other: Scalar): Scalar = Scalar((0..3).map { `val`[it] + other.`val`[it] }.toDoubleArray()) internal operator fun Scalar.minus(other: Scalar): Scalar = Scalar((0..3).map { `val`[it] - other.`val`[it] }.toDoubleArray()) internal operator fun Scalar.times(factor: Double): Scalar = Scalar((0..3).map { `val`[it] * factor }.toDoubleArray()) internal operator fun Scalar.div(divider: Double): Scalar = Scalar((0..3).map { (`val`[it] / divider) }.toDoubleArray()) internal fun Scalar.asArray(length: Int = 4): DoubleArray { assert(length > 0) return (0 until length).map { `val`.getOrElse(it) { 0.0 } }.toDoubleArray() } internal fun Mat.copyToColor(image: Mat) = withMat(MatInfo.from(image, CvType.CV_8U)) { tmp -> convertTo(tmp, CvType.CV_8U) Imgproc.cvtColor(tmp, image, Imgproc.COLOR_GRAY2BGR) image }