Пример #1
0
 image_u8_t *fromCvMat(const cv::Mat & img) { 
     image_u8_t *image_u8 = image_u8_create_alignment(img.cols, img.rows, img.step);
     // image_u8_t *image_u8 = image_u8_create(img.cols, img.rows);
     int size = img.total() * img.elemSize();
     memcpy(image_u8->buf, img.data, size * sizeof(uint8_t));
     return image_u8;
 }
Пример #2
0
image_u8_t *image_u8_create(unsigned int width, unsigned int height)
{
    return image_u8_create_alignment(width, height, DEFAULT_ALIGNMENT);
}
Пример #3
0
image_u8_t *image_u8_copy(const image_u8_t *in)
{
    uint8_t *buf = malloc(in->height*in->stride*sizeof(uint8_t));
    memcpy(buf, in->buf, in->height*in->stride*sizeof(uint8_t));

    // const initializer
    image_u8_t tmp = { .width = in->width, .height = in->height, .stride = in->stride, .buf = buf };

    image_u8_t *copy = calloc(1, sizeof(image_u8_t));
    memcpy(copy, &tmp, sizeof(image_u8_t));
    return copy;
}

void image_u8_destroy(image_u8_t *im)
{
    if (!im)
        return;

    free(im->buf);
    free(im);
}

////////////////////////////////////////////////////////////
// PNM file i/o
image_u8_t *image_u8_create_from_pnm(const char *path)
{
    // printf("loading %s again.\n", path);
    return image_u8_create_from_pnm_alignment(path, DEFAULT_ALIGNMENT);
}

image_u8_t *image_u8_create_from_pnm_alignment(const char *path, int alignment)
{
    pnm_t *pnm = pnm_create_from_file(path);
    if (pnm == NULL)
    {
        // printf("nono\n");
        return NULL;
    }

    image_u8_t *im = NULL;
    // printf("try ne \n");
    switch (pnm->format) {
        // printf("noe??\n");
        case PNM_FORMAT_GRAY: {
            im = image_u8_create_alignment(pnm->width, pnm->height, alignment);

            for (int y = 0; y < im->height; y++)
                memcpy(&im->buf[y*im->stride], &pnm->buf[y*im->width], im->width);

            break;
        }

        case PNM_FORMAT_RGB: {
            im = image_u8_create_alignment(pnm->width, pnm->height, alignment);

            // Gray conversion for RGB is gray = (r + g + g + b)/4
            for (int y = 0; y < im->height; y++) {
                for (int x = 0; x < im->width; x++) {
                    uint8_t gray = (pnm->buf[y*im->width*3 + 3*x+0] +    // r
                                    pnm->buf[y*im->width*3 + 3*x+1] +    // g
                                    pnm->buf[y*im->width*3 + 3*x+1] +    // g
                                    pnm->buf[y*im->width*3 + 3*x+2])     // b
                        / 4;

                    im->buf[y*im->stride + x] = gray;
                }
            }

            break;
        }
        // printf("bad!!\n");
    }

    pnm_destroy(pnm);
    return im;
}