Kotlin Bytedeco OpenCV 图像图像57 图像ROI
1 添加依赖
kotlin">< ? xml version= "1.0" encoding= "UTF-8" ? >
< project xmlns: xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns= "http://maven.apache.org/POM/4.0.0" xsi: schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion> 4.0 . 0 < / modelVersion> < groupId> com. xu< / groupId> < artifactId> KotlinOpenCV< / artifactId> < version> 1.0 < / version> < properties> < kotlin . version> 2.0 . 0 < / kotlin . version> < project. build. sourceEncoding> UTF- 8 < / project. build. sourceEncoding> < kotlin . code. style> official< / kotlin . code. style> < kotlin . compiler. jvmTarget> 1.8 < / kotlin . compiler. jvmTarget> < / properties> < repositories> < repository> < id> mavenCentral< / id> < url> https: / / repo1. maven. org/ maven2/ < / url> < / repository> < / repositories> < dependencies> < dependency> < groupId> cn. hutool< / groupId> < artifactId> hutool- all< / artifactId> < version> 5.8 . 29 < / version> < / dependency> < dependency> < groupId> org. apache. commons< / groupId> < artifactId> commons- compress< / artifactId> < version> 1.27 . 0 < / version> < / dependency> < dependency> < groupId> org. tukaani< / groupId> < artifactId> xz< / artifactId> < version> 1.10 < / version> < / dependency> < dependency> < groupId> org. jetbrains. kotlin x< / groupId> < artifactId> kotlin x- coroutines- core< / artifactId> < version> 1.9 . 0 - RC< / version> < / dependency> < ! -- < dependency> -- > < ! -- < groupId> org. opencv < / groupId> -- > < ! -- < artifactId> opencv < / artifactId> -- > < ! -- < version> 4100 < / version> -- > < ! -- < scope> system< / scope> -- > < ! -- < systemPath> ${ project. basedir} / lib/ opencv / opencv - 4100 . jar< / systemPath> -- > < ! -- < / dependency> -- > < dependency> < groupId> org. bytedeco < / groupId> < artifactId> opencv - platform< / artifactId> < version> 4.10 . 0 - 1.5 . 11 < / version> < / dependency> < ! -- < dependency> -- > < ! -- < groupId> org. bytedeco < / groupId> -- > < ! -- < artifactId> ffmpeg- platform< / artifactId> -- > < ! -- < version> 6.1 . 1 - 1.5 . 10 < / version> -- > < ! -- < / dependency> -- > < dependency> < groupId> org. jetbrains. kotlin < / groupId> < artifactId> kotlin - test- junit5< / artifactId> < version> 2.0 . 0 < / version> < scope> test< / scope> < / dependency> < dependency> < groupId> org. junit. jupiter< / groupId> < artifactId> junit- jupiter< / artifactId> < version> 5.10 . 0 < / version> < scope> test< / scope> < / dependency> < dependency> < groupId> org. jetbrains. kotlin < / groupId> < artifactId> kotlin - stdlib< / artifactId> < version> 2.0 . 0 < / version> < / dependency> < / dependencies> < build> < sourceDirectory> src/ main/ kotlin < / sourceDirectory> < testSourceDirectory> src/ test/ kotlin < / testSourceDirectory> < plugins> < plugin> < groupId> org. jetbrains. kotlin < / groupId> < artifactId> kotlin - maven- plugin< / artifactId> < version> 2.0 . 0 < / version> < executions> < execution> < id> compile< / id> < phase> compile< / phase> < goals> < goal> compile< / goal> < / goals> < / execution> < execution> < id> test- compile< / id> < phase> test- compile< / phase> < goals> < goal> test- compile< / goal> < / goals> < / execution> < / executions> < / plugin> < plugin> < artifactId> maven- surefire- plugin< / artifactId> < version> 2.22 . 2 < / version> < / plugin> < plugin> < artifactId> maven- failsafe- plugin< / artifactId> < version> 2.22 . 2 < / version> < / plugin> < plugin> < groupId> org. codehaus. mojo< / groupId> < artifactId> exec- maven- plugin< / artifactId> < version> 1.6 . 0 < / version> < configuration> < mainClass> MainKt< / mainClass> < / configuration> < / plugin> < / plugins> < / build> < / project>
2 测试代码
kotlin">package com. xu. com. xu. transimport org. bytedeco . javacpp . Loader
import org. bytedeco . javacpp . Pointer
import org. bytedeco . opencv . global. opencv _core
import org. bytedeco . opencv . global. opencv _highgui
import org. bytedeco . opencv . global. opencv _imgcodecs
import org. bytedeco . opencv . global. opencv _imgproc
import org. bytedeco . opencv . opencv _core. Mat
import org. bytedeco . opencv . opencv _core. Point
import org. bytedeco . opencv . opencv _core. Point2f
import org. bytedeco . opencv . opencv _core. Rect
import org. bytedeco . opencv . opencv _core. Scalar
import org. bytedeco . opencv . opencv _core. Size
import org. bytedeco . opencv . opencv _highgui. MouseCallbackobject Cropping { init { Loader. load ( opencv _core:: class . java) } data class MouseState ( val image: Mat) { lateinit var temp: Matvar second: Point = Point ( ) var first: Point = Point ( ) var drawing: Boolean = false } @JvmStatic fun main ( args: Array< String> ) { roi ( ) } private fun roi ( ) { val src = opencv _imgcodecs. imread ( "C:\\Users\\hyacinth\\Desktop\\1.png" ) if ( src == null || src. empty ( ) ) { return } val ( size, point) = select ( src) println ( " ${ point. x ( ) } , ${ point. x ( ) } " ) val dst = Mat ( ) opencv _imgproc. getRectSubPix ( src, size, Point2f ( point) , dst) opencv _highgui. imshow ( "src" , src) opencv _highgui. imshow ( "dst" , dst) opencv _highgui. waitKey ( 0 ) } private fun roi 2( ) { val src = opencv _imgcodecs. imread ( "C:\\Users\\hyacinth\\Desktop\\1.png" ) if ( src == null || src. empty ( ) ) { return } val rect = Rect ( 100 , 100 , 400 , 200 ) val images = Mat ( src, rect) opencv _highgui. imshow ( "ORACLE" , src) opencv _highgui. imshow ( "CROPPING" , images) opencv _highgui. waitKey ( 0 ) } private fun roi 3( type: Int) { val src = opencv _imgcodecs. imread ( "C:\\Users\\hyacinth\\Desktop\\1.png" ) if ( src == null || src. empty ( ) ) { return } val dst = Mat ( ) opencv _imgproc. getRectSubPix ( src, Size ( 400 , 200 ) , Point2f ( ( src. rows ( ) / 2.0 ) . toFloat ( ) , ( src. cols ( ) / 2.0 ) . toFloat ( ) ) , dst) opencv _highgui. imshow ( "src" , src) opencv _highgui. imshow ( "dst" , dst) opencv _highgui. waitKey ( 0 ) } private fun select ( image: Mat) : Pair< Size, Point2f> { val window = "Drawing" opencv _highgui. namedWindow ( window, opencv _highgui. WINDOW_AUTOSIZE) val state = MouseState ( image) state. temp = image. clone ( ) val callback = object : MouseCallback ( ) { override fun call ( event: Int, x: Int, y: Int, flags: Int, params: Pointer? ) { when ( event) { opencv _highgui. EVENT_LBUTTONDOWN -> { state. drawing = true state. first. x ( x) state. first. y ( y) } opencv _highgui. EVENT_MOUSEMOVE -> { if ( state. drawing) { state. temp = state. image. clone ( ) state. second. x ( x) state. second. y ( y) opencv _imgproc. rectangle ( state. temp, Rect ( Point ( state. first) , Point ( state. second) ) , Scalar ( 255.0 , 0.0 , 0.0 , 0.0 ) ) opencv _highgui. imshow ( window, state. temp) } } opencv _highgui. EVENT_LBUTTONUP -> { state. drawing = false state. second. x ( x) state. second. y ( y) opencv _imgproc. rectangle ( state. image, Rect ( Point ( state. first) , Point ( state. second) ) , Scalar ( 0.0 , 255.0 , 0.0 , 0.0 ) ) opencv _highgui. imshow ( window, state. image) } } } } opencv _highgui. setMouseCallback ( window, callback, null ) while ( true ) { opencv _highgui. imshow ( window, state. temp) if ( opencv _highgui. waitKey ( 1 ) . toChar ( ) == 27 . toChar ( ) ) { opencv _highgui. destroyWindow ( window) return Pair ( Size ( state. second. x ( ) - state. first. x ( ) , state. second. y ( ) - state. first. y ( ) ) , Point2f ( ( 0.5 * state. second. x ( ) + 0.5 * state. first. x ( ) ) . toFloat ( ) , ( 0.5 * state. second. y ( ) + 0.5 * state. first. y ( ) ) . toFloat ( ) ) ) } } } }
3 测试结果