дисперсия скользящего окна в изображении

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

введите описание изображения здесь

Вскоре я пытаюсь найти однородную область, чтобы устранить неинтересную область (не дорожный знак), вычисляя дисперсию скользящего окна над изображением

Я использую этот код, но у меня всегда есть исключение

int main(int argc, char** argv)
{
IplImage *image1;

if ((image1 = cvLoadImage("segmenter1/00051.jpg", 0)) == 0)
return NULL;

int rows = image1->width;
int cols = image1->height;

Mat image = Mat::zeros(cols, rows, CV_32FC1);
double x = 0;
double temp = 0;

for (int i = 0; i < rows; i++){
for (int j = 0; j < cols; j++){
temp = cvGet2D(image1, j, i).val[0];

x = temp / 255;

image.at<float>(j, i) = x;
x = image.at<float>(j, i);
}
}

int k = 16;
double seuil = 0.0013;
CvScalar blanc;//pixel blanc
blanc.val[0] = 255;
cv::Scalar mean, stddev; //0:1st channel, 1:2nd channel and 2:3rd channel

for (int j = 0; j < rows - k; j++)
{
for (int i = 0; i < cols - k; i++)
{
double som = 0;
double var = 0;
double t = 0;

for (int jj = j; jj < k+j; jj++)
{
for (int ii = i; ii < k+i; ii++)
{
t = image.at<float>(jj, ii);
som = som + t;
t = t*t;
var =var+ t;
}
}

som = som / (k*k);
if (som>0.18){
var = (var / (k*k)) - (som*som);
if (var < seuil)
cvSet2D(image1, j, i, blanc);
}
}
}

char stsave[80];
cvSaveImage("variance/00051.jpg", image1);
cv::waitKey(0);
return 0;
}

0

Решение

Без конкретного исключения, я могу только догадываться, что это out_of_range, Согласно документам opencv, cvGet2D а также cvSet2D параметры image, y, x который эффективно переводит на image, rows, cols, Вы перевернули определение rows, cols и имеют противоречивое использование между двумя циклами. Может быть, исправить это и попробовать еще раз.

0

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

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

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