У меня есть контур объекта и координаты центра. Сейчас я пытаюсь определить точку, лежащую на границе контура, но все еще на той же высоте (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
}