computer-vision-project/src/main/kotlin/network/rs485/ben/computervision/Color.kt

38 lines
1.4 KiB
Kotlin

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
}