Преобразование файлов PBM в IplImage - PullRequest
0 голосов
/ 22 марта 2011

Видимо, этот код выдает мне ошибку в последней строке cvCvtColor (), что не так? Есть ли что-нибудь, что можно улучшить в этой функции?

+(IplImage*) LoadPbmAsIplImage: (NSString*) fileName{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"pbm"];
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSArray *lines = [content componentsSeparatedByString:@"\n"];
    NSString *secondLine = [lines objectAtIndex:1]; //because first line (index 0) contains meta data
    int width = [secondLine length];
    int height = [lines count]-1;
    Mat *mat = new Mat(width, height, CV_8UC4);
    MatIterator_<uint> it = mat->begin<uint>();
    for (int i=0; i<[lines count]; i++){
        for (int j=0; j<[[lines objectAtIndex:i] length]; j++){
            int pixelValue = 0;
            if ([[lines objectAtIndex:i] characterAtIndex:j] == '1'){
                pixelValue = 255;
            }
            *it = pixelValue;
        }
    }
    IplImage iplImage = *mat;
    IplImage* rv = cvCreateImage(cvSize(iplImage.width, iplImage.height), IPL_DEPTH_8U, 3);
    cvCvtColor(mat, rv, CV_RGBA2BGR);
    return rv;
}

1 Ответ

1 голос
/ 22 марта 2011

Вы смешиваете интерфейс C ++ (cv :: Mat) с интерфейсом C (IplImage), почему вы это делаете?

Mat *mat = new Mat(width, height, CV_8UC4);

Это утечка памяти, вы никогда не удаляете эту карту, такжепочти нет причин создавать Mat с новым - просто Mat mat(width, height, CV_8UC4) отлично справляется с работой, и вам не нужно его удалять.

cvCvtColor(mat, rv, CV_RGBA2BGR);

cvCvtColor ожидает два IplImage* s в качестве аргументов, выдайте ему cv::Mat* и IplImage*, это не может работать.Замените первый mat на &iplImage или просто последовательно используйте интерфейс c ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...