opencv c ++查找轮廓的内切圆

时间:2018-12-06 06:53:08

标签: c++ opencv find geometry

我想找到轮廓的最大内切圆

我用cv::findContours检测到轮廓,并且以vector<Point>的形式出现。

我知道如何检测最小封闭圆(cv::minEnclosingCircle),但不知道如何获取最大封闭圆。该怎么做?

问题2:如何使刻划和外接圆以质心为中心?


为澄清起见,我尝试描述这些圆圈的含义:

  1. 最小包围圈:从外部触摸物体,中心位置无所谓,最小面积。
  2. 外接圆:从外部触摸对象,中心位置在对象的质心上,最小面积。
  3. 最大闭合圆:从内部触摸物体,中心位置无所谓,最大面积。
  4. 内切圆:从内部触摸物体,物体质心的中心位置,最大面积。

2 个答案:

答案 0 :(得分:5)

您可以:

1)从轮廓创建遮罩

enter image description here

2)计算蒙版上的img

enter image description here

3)最大值是半径,位置是中心

enter image description here

代码:

distanceTransform

答案 1 :(得分:1)

至少我解决了以质心为中心的两个圆的计算(类似于@Grillteller建议的方法):

library(text2vec)
tokens = word_tokenizer(tolower(data$item))

v = create_vocabulary(itoken(tokens))

v = prune_vocabulary(v, term_count_min = 12, term_count_max = 1000000)
it = itoken(tokens)

# Use our filtered vocabulary
vectorizer = vocab_vectorizer(v)

dtm = create_dtm(it, vectorizer)
tcm = create_tcm(it, vectorizer, skip_grams_window = 50)

#word vectors from FastText
wv_fasttext<-as.data.frame(wv_fasttext)
rownames(wv_fasttext) <- wv_fasttext[, 'na']

wv_fasttext$name<- NULL
wv_fasttext<- data.matrix(wv_fasttext, rownames.force = TRUE)

rwmd_model = RWMD$new(wv)

rwmd_distance = dist2(dtm[1:1000,], dtm[1:1000,], method = rwmd_model, norm 
= 'none')

但是最初的问题可以解决(最大面积,中心位置无关紧要)。