Рисование контуров, извлеченных из двоичного изображения

Я хочу использовать findContours с двоичным изображением, но функция обратного вызова вызывает ошибку:

Указан неверный адрес для RtlFreeHeap

при возвращении.

Когда я хочу использовать clear() освободить vector<vector<Point> > значение, это вызывает то же исключение и код сбой в free.c в строке:

if (retval == 0) errno = _get_errno_from_oserr(GetLastError());

Например:

void onChangeContourMode(int, void *)
{
Mat m_frB = imread("3.jpg", 0);
vector<vector<Point>> contours
vector<Vec4i> hierarchy;
findContours(m_frB, contours, hierarchy, g_contour_mode, CV_CHAIN_APPROX_SIMPLE);
for( int idx = 0 ; idx >= 0; idx = hierarchy[idx][0] )
drawContours( m_frB, contours, idx, Scalar(255,255,255),
CV_FILLED, 8, hierarchy );
imshow( "Contours", m_frB );
}

Может кто-нибудь мне помочь? Большое спасибо!

1

Решение

Mat m_frB = imread("3.jpg", CV_LOAD_IMAGE_GRAYSCALE);

грузы 3.jpg как изображение в градациях серого 8bpp, так что это не двоичное изображение. Это специфично для findContours функция, которая «ненулевые пиксели обрабатываются как 1. Нулевые пиксели остаются 0, поэтому изображение обрабатывается как двоичное». Также обратите внимание, что это «Функция изменяет изображение при извлечении контуров».

Настоящая проблема здесь заключается в том, что, хотя конечное изображение 8bpp, вы должны убедиться, что оно имеет 3 канала, используя CV_8UC3 прежде чем рисовать контуры RGB в нем. Попробуй это:

// find contours:
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(m_frB, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

// draw contours:
Mat imgWithContours = Mat::zeros(m_frB.rows, m_frB.cols, CV_8UC3);
RNG rng(12345);
for (int i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(50, 255), rng.uniform(50,255), rng.uniform(50,255));
drawContours(imgWithContours, contours, i, color, 1, 8, hierarchy, 0);
}
imshow("Contours", imgWithContours);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]