Я использую Mat::convertTo()
в параллельной области, он не преобразует матричные данные в определенный тип. Но я тестировал другие функции, например. cv::threshold()
, cv::imshow()
. Он работает нормально. Я не знаю, что случилось. См. Мой код ниже:Mat :: convertTo не работает с OpenMP
// Mat dst is CV_32FC1
if(dst.type() != CV_8UC1)
{
int rows = dst.rows;
#pragma omp parallel num_threads(2)
{
int numt = omp_get_num_threads();
int tid = omp_get_thread_num();
int start = tid*(rows/numt);
int end = (tid+1)*(rows/numt);
if(tid == (numt-1))
{
end = rows;
}
Mat tmp = dst.rowRange(start, end);
tmp.convertTo(tmp, CV_8UC1);
}
Параллельная область выполнена, но тип dst по-прежнему CV_32FC1. В чем проблема в моем коде? Любая помощь будет оценена.
Regard, Nan
Это не может работать, поскольку вы не меняете тип 'dst' в любом месте. В коде отсутствует также скобка. –
Спасибо @macs, но я до сих пор не понимаю вашего предложения. Можете ли вы направить мне код или что-то еще? Поскольку 'Mat :: rowRange()' создает новый заголовок для диапазона строк 'dst'. Поэтому, если я конвертирую тип 'tmp', почему тип' dst' все еще старый. Извините за бессмысленный вопрос. Я новичок в opencv. :) –
Это потому, что вы создаете копию 'dst.rowRange'. Таким образом, при изменении типа 'tmp' вы не меняете тип' dst'. Было бы также полезно, если бы вы предоставили еще один код. Сейчас алгоритм не имеет для меня никакого смысла. –