Ошибка подтверждения OpenCV для некоторых значений Pixal

0

Я загрузил изображение на коврик:

Mat Mask = cvLoadImage(filename);

Его изображение 3744 X 5616 RGB. На следующем шаге я преобразую его в оттенки серого.

cvtColor(Mask,Mask,CV_BGR2GRAY);

после этого я нормализую его, чтобы использовать полный оттенок серого позже:

normalize(Mask,Mask,0,255,NORM_MINMAX,CV_8U);

Теперь мне нужны конкретные значения оттенков серого и получение ошибки по некоторым значениям:

for(int i=0;i<(Picture.rows);i++)
{
    for(int j=0;j<(Picture.cols);j++)
    {
Vec3b  masked = Mask.at<Vec3b>(i,j);
//some stuff
}
}

Я получаю следующую ошибку на некоторых пикселях:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in unknown function, file c:\opencv\build\include\opencv2\core\mat.hpp, line 537

Кто-нибудь может сказать мне, что я сделал неправильно? Странно, что он появляется только на некоторых пиксельных значениях

Редактировать: Дополнительная информация: Если я загружаю свою Маску в оттенки серого, все работает отлично. Но когда я использую cvtColor() или Mat Mask = imread (имя файла, CV_LOAD_IMAGE_GRAYSCALE); на изображении появляется ошибка. Очень странно...

Теги:
opencv

1 ответ

2
Лучший ответ

Я думаю, ваша проблема в том, что вы получаете доступ к двоичному изображению с .at<Vec3b>(i,j). Вместо этого вы хотите получить доступ к каждому пикселю с помощью .at<uchar>(i,j). cvtColor(Mask,Mask,CV_BGR2GRAY); изменяет 3-канальное изображение BGR на одноканальное изображение в оттенках серого. .at<Vec3b>(i,j) пытается получить доступ к 3-канальному изображению, которое в конечном итоге пройдет мимо конца массива изображений в памяти, что вызовет проблемы или отключит эти утверждения.

Внутренняя часть цикла for должна выглядеть так:

unsigned char masked = Mask.at<uchar>(i,j);
  • 0
    Большое спасибо за его работу, как и ожидалось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню