Вы получаете сообщение об ошибке при вызове mRegion.at ().Где определен mRegion?
Вот эквивалентный фрагмент из kmeans.cpp
примера кода:
kmeans(points, clusterCount, labels,
TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0),
3, KMEANS_PP_CENTERS, centers);
img = Scalar::all(0);
for( i = 0; i < sampleCount; i++ )
{
int clusterIdx = labels.at<int>(i);
Point ipt = points.at<Point2f>(i);
circle( img, ipt, 2, colorTab[clusterIdx], CV_FILLED, CV_AA );
}
Используется одна и та же переменная points
для первого аргумента kmeans
ив качестве источника для ipt
в цикле for
.Я думаю, что вы, вероятно, хотите использовать mImage
в цикле for
, а не mRegion.
Edit Итак, теперь вы изменили код для использования mImage в for
цикл, вам нужно понять, почему вы получаете ошибку утверждения.Сообщение с утверждением очень загромождено кодом шаблона, поэтому оно взято из mat.hpp:
dims <= 2 && data && (size.p[0] == 1 || size.p[1] == 1) &&
(unsigned)i0 < (unsigned)(size.p[0] + size.p[1] - 1) &&
elemSize() == CV_ELEM_SIZE(DataType<_Tp>::type)
Один или несколько из этих тестов не пройдены.Если вы используете пустой mImage, это будет неудачей, потому что data
будет ноль.Вы не можете позвонить at
на пустую матрицу.В любом случае, проверьте свойства mImage, чтобы определить причину ошибки подтверждения.