颜色值在整个图像中具有相同的值



>我有一个物体的轮廓和中心坐标。现在我正在尝试检测位于轮廓边界上的点,但仍与中心位于相同的高度 (y( 上。背景设置为黑色。因此,我正在计算阈值图像并迭代像素并检查它们是否设置为白色。问题是根据我的代码,所有值都是 0。

也尝试处理原始图像。问题仍然存在,我总是得到 0/255/255。无论我是在对象内部还是在背景中。

private fun calcPointOnContour(point: Point, image: Mat): Point {
    var pointOnContour = Point()
    val ycrcb = getCbComponent(image)
    val imageThresh = getThresholdImage(ycrcb)
    for (i in point.x.toInt() until image.cols()) {
        val pixel = imageThresh.get(i, point.y.toInt())
        if (pixel[0] < 255) {
            pointOnContour = Point(i.toDouble(), point.y)
            break
        }
    }
    return pointOnContour
}
private fun getCbComponent(mat: Mat): Mat {
    val ycrcb = Mat(mat.rows(), mat.cols(), CvType.CV_8UC3)
    val lYCrCb = ArrayList<Mat>(3)
    Imgproc.cvtColor(mat, ycrcb, Imgproc.COLOR_RGB2YCrCb)
    Core.split(mat, lYCrCb)
    return lYCrCb[2]
}
private fun getThresholdImage(mat: Mat): Mat {
    val imageThresh = Mat.zeros(mat.rows(), mat.cols(), CvType.CV_8UC1)
    Imgproc.threshold(mat, imageThresh, 100.0, 255.0, Imgproc.THRESH_BINARY)
    return imageThresh
}
Imgproc.threshold是一种

根据您提供的阈值将图像转换为二进制的方法。 https://docs.opencv.org/2.4/doc/tutorials/imgproc/threshold/threshold.html

您提供的maxVal为 255

,因此只有 0 或 255。

====

Imgproc.cvtColor(mat, ycrcb, Imgproc.COLOR_RGB2YCrCb)
Core.split(mat, lYCrCb)

我认为应该Core.split(ycrcb, lYCrCb)

另外,您能否在从图像创建原始垫子的地方添加代码?也许,那里有一些问题。

相关内容

  • 没有找到相关文章

最新更新