Необработанное исключение после выполнения - PullRequest
0 голосов
/ 09 января 2011

Я пытаюсь сделать серое изображение более ярким, код компилировался нормально, но во втором изображении ничего не изменилось, и после этого было выполнено сообщение об ошибке Unhandled exception .... Вот кусок моего кода:

int main(int argc, _TCHAR* argv[])
{
    IplImage *img = cvLoadImage("mra.jpg");
    if (!img) {
        printf("Error: Couldn't open the image file.\n");
        return 1;
    }
    //IplImage* new_image = getlargersize(img);

    double Min , Max ;
    Min = Max = 0 ;
    Max_Min (img , &Min , &Max);
    cout<<"the max value in the picture is :"<<Min<<" and the minimum value is :"<<Max<<endl ;

    IplImage* img2 = eclaircir(Min ,Max ,img);

    cvNamedWindow("Image:", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("Image2:", CV_WINDOW_AUTOSIZE);
    cvShowImage("Image2:", img2);
    cvShowImage("Image:", img);

    cvWaitKey(0);

    cvDestroyWindow("Image2:");
    cvDestroyWindow("Image:");
    cvReleaseImage(&img2);
    cvReleaseImage(&img);
    return 0;
}    
void Max_Min(IplImage* temp , double *min , double *max ){
    CvScalar pix ; 
    for (int i = 0 ; i < temp->height ; i++){
        for (int j = 0 ; j < temp->width ; j++){
            pix = cvGet2D(temp , i , j); 
            if ( pix.val[0] >= *max ){
                *max = pix.val[0];
            }
            if ( pix.val[0] <= *min){
            *min = pix.val[0];
            }
        }
    }
}

IplImage* eclaircir (double min , double max , IplImage* image){
    double temp = max - min ;
    CvScalar pix ;
    for (int i = 0 ; i < image->height ; i++){
        for (int j = 0 ; j < image->width ; j++){
            pix = cvGet2D(image , i , j); 
            pix.val[0] = ( pix.val[0] - min)*255 ;
            pix.val[0] = pix.val[0]/temp ;
            cvSet2D(image , i , j , pix );
        }
    }
    return image ;
}

1 Ответ

2 голосов
/ 09 января 2011
  • Вы говорите, что используете C ++ в своих тегах, но используете интерфейс C opencv. Зачем? Интерфейс C ++ намного удобнее.
  • Есть функции opencv для того, что делают ваши функции. http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#cv-minmaxloc для минимального и максимального значений и http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html?highlight=scaleabs#convertScaleAbs для масштабирования значений изображения.
  • Возможно, ваше нарушение прав доступа связано с тем, что вы дважды освобождаете свое изображение. Ваш eclaircir возвращает входное изображение, поэтому img и img2 указывают на один и тот же IplImage. Еще одна причина использовать интерфейс c ++.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...