Kotlin Bytedeco OpenCV 图像图像57 图像ROI
1 添加依赖
< ? 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. 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>
2 测试代码
package com. xu. com. xu. image
import org. bytedeco. javacpp. Loader
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. Scalar
import org. bytedeco. opencv. opencv_core. Size
import org. bytedeco. opencv. opencv_imgproc. Vec4fVector
object Circles {
init {
Loader. load ( opencv_core:: class . java)
}
@JvmStatic
fun main ( args: Array< String> ) {
roi ( )
}
private fun roi ( ) {
val src = opencv_imgcodecs. imread ( "C:\\Users\\xuyq\\Desktop\\2.png" )
if ( src == null || src. empty ( ) ) {
return
}
val dst = Mat ( )
opencv_imgproc. getRectSubPix (
src,
Size ( 100 , 100 ) ,
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 circles ( ) {
val src = opencv_imgcodecs. imread ( "C:\\Users\\hyacinth\\Desktop\\2.png" )
if ( src == null || src. empty ( ) ) {
return
}
val img = Mat ( )
opencv_imgproc. medianBlur ( src, img, 1 )
val gray = Mat ( )
opencv_imgproc. cvtColor ( img, gray, opencv_imgproc. COLOR_BGR2GRAY)
val point = Vec4fVector ( )
opencv_imgproc. HoughCircles (
gray. getPointer ( ) ,
point,
opencv_imgproc. HOUGH_GRADIENT,
1.0 ,
20.0 ,
50.0 ,
30.0 ,
20 ,
40
)
println ( point. get ( ) . size)
for ( i in 0 until point. size ( ) ) {
val circle = point[ i]
val x = circle[ 0 ] . toInt ( )
val y = circle[ 1 ] . toInt ( )
val radius = circle[ 2 ] . toInt ( )
opencv_imgproc. circle (
src,
Point ( x, y) ,
5 ,
Scalar ( 0.0 , 255.0 , 0.0 , 0.0 ) ,
- 1 ,
opencv_imgproc. LINE_AA,
0
)
opencv_imgproc. circle (
src,
Point ( x, y) ,
radius,
Scalar ( 255.0 , 0.0 , 0.0 , 0.0 ) ,
2 ,
opencv_imgproc. LINE_AA,
0
)
}
opencv_highgui. imshow ( "Detected Circles" , src)
opencv_highgui. waitKey ( 0 )
}
}
3 测试结果