您的位置:首页 > 健康 > 养生 > Kotlin OpenCV 图像图像51图片轮廓获取

Kotlin OpenCV 图像图像51图片轮廓获取

2024/12/23 0:26:50 来源:https://blog.csdn.net/qq_34814092/article/details/141434645  浏览:    关键词:Kotlin OpenCV 图像图像51图片轮廓获取

Kotlin OpenCV 图像图像51图片轮廓获取

在OpenCV库中,Imgproc.adaptiveThreshold、Imgproc.findContours 和 Imgproc.boundingRect 这三个方法在图像处理和分析中非常有用。以下是它们的详细作用:

Imgproc.adaptiveThreshold解释
作用该方法用于将灰度图像二值化。与普通的阈值处理不同,adaptiveThreshold 可以根据图像局部区域的亮度变化自适应地确定每个像素的阈值。
使用场景适用于光照不均匀的图像,在全局阈值不能很好区分前景和背景时,adaptiveThreshold 可以生成更准确的二值图像。
src输入的灰度图像。
dst输出的二值图像。
maxValue阈值分割后的最大值(通常为255)。
adaptiveMethod自适应方法,可以是 ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C。
thresholdType阈值类型,通常为 THRESH_BINARY 或 THRESH_BINARY_INV。
blockSize用于计算阈值的邻域大小。
C从计算出的平均值或加权平均值中减去的常数,用于微调。
Imgproc.findContours解释
作用该方法用于检测图像中的轮廓。它可以识别二值图像中的连通分量,并将这些连通分量的边缘表示为轮廓。
使用场景常用于对象检测、形状分析、物体识别等任务中,是许多高层次图像分析算法的基础。
image输入的二值图像,通常是经过阈值处理的结果。
contours输出的轮廓列表,其中每个轮廓都是一个点的列表。
hierarchy可选的层次结构信息,用于描述轮廓之间的嵌套关系。
mode轮廓的检索模式,如 RETR_EXTERNAL(只检索外部轮廓)或 RETR_TREE(检索所有轮廓并重构嵌套层次)。
method轮廓的近似方法,如 CHAIN_APPROX_SIMPLE(压缩水平、垂直和对角线段,保留端点)或 CHAIN_APPROX_NONE(保留所有点)。
Imgproc.boundingRect解释
作用该方法用于计算并返回包围特定点集或轮廓的最小矩形边框。
使用场景常用于从图像中提取感兴趣区域(ROI),或进一步分析特定区域的内容。
points输入的点集或轮廓,可以是一个 Mat 或 List 对象。
输出返回一个 Rect 对象,表示包围点集的矩形框,包含位置和尺寸信息(即 x, y, width, height)。

Kotlin OpenCV 全部代码

package com.xu.com.xu.imageimport org.opencv.core.Core
import org.opencv.core.Mat
import org.opencv.core.MatOfPoint
import org.opencv.core.Scalar
import org.opencv.highgui.HighGui
import org.opencv.imgcodecs.Imgcodecs
import org.opencv.imgproc.Imgproc
import java.io.File
import java.util.*object Contour {init {val os = System.getProperty("os.name")val type = System.getProperty("sun.arch.data.model")if (os.uppercase(Locale.getDefault()).contains("WINDOWS")) {val lib = if (type.endsWith("64")) {File("lib\\opencv-4.9\\x64\\" + System.mapLibraryName(Core.NATIVE_LIBRARY_NAME))} else {File("lib\\opencv-4.9\\x86\\" + System.mapLibraryName(Core.NATIVE_LIBRARY_NAME))}System.load(lib.absolutePath)}println("OpenCV: ${Core.VERSION}")}@JvmStaticfun main(args: Array<String>) {val image = Imgcodecs.imread("C:\\Users\\xuyq\\Desktop\\1.png")val gray = Mat()Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY)val binary = Mat()// 灰度图像自适应阈值二值化Imgproc.adaptiveThreshold(gray,binary,255.0,Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C,Imgproc.THRESH_BINARY_INV,11,2.0)val contours = mutableListOf<MatOfPoint>()val hierarchy = Mat()// 检测图像中的轮廓Imgproc.findContours(binary, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE)for (contour in contours) {// 计算并返回包围特定点集或轮廓的最小矩形边框val rect = Imgproc.boundingRect(contour)// 过滤小区域if (rect.width > 28 || rect.height > 28) {rect.x -= 15rect.y -= 15rect.width += 30rect.height += 30Imgproc.rectangle(image, rect, Scalar(0.0, 0.0, 255.0), 2)}}HighGui.imshow("src", image)HighGui.waitKey(0)}}

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com