Kotlin Bytedeco OpenCV 图像图像57 图像ROI  
  
  
 
< ? xml version= "1.0" = "UTF-8" ? > 
< project xmlns: xsi= "http://www.w3.org/2001/XMLSchema-instance" = "http://maven.apache.org/POM/4.0.0" : 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. kotlinx< / groupId> 
            < artifactId> kotlinx- 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> 
package  com. xu. com. xu. trans
import  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. MouseCallback
object  Cropping { 
    init  { 
        Loader. load ( opencv_core:: class . java) 
    } 
    
    data  class  MouseState ( 
        val  image:  Mat
    )  { 
        lateinit  var  temp:  Mat
        var  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  roi2 ( )  { 
        
        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  roi3 ( 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" . 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 ( ) 
                    ) 
                ) 
            } 
        } 
    } 
}