⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image.c

📁 指纹识别 C代码
💻 C
字号:
/*############################################################################# * 文件名:image.c * 功能:  实现了指纹图像的基本操作 * modified by  PRTsinghua@hotmail.com#############################################################################*/#include <stdlib.h>#include <stdio.h>#include <string.h>#include "image.h"/* 指纹图像结构。256级灰度图 */typedef struct iFvsImage_t{    FvsByte_t       *pimg;         /* 8-bit图像数组 */        FvsInt_t        w;             /* 宽度          */    FvsInt_t        h;             /* 高度          */    FvsInt_t        pitch;         /* 倾斜度        */    FvsImageFlag_t  flags;         /* 标记          */} iFvsImage_t;/******************************************************************************  * 功能:创建一个新的图像对象  * 参数:无  * 返回:失败返回空,否则返回新的图像对象******************************************************************************/FvsImage_t ImageCreate(){    iFvsImage_t* p = NULL;    p = (FvsImage_t)malloc(sizeof(iFvsImage_t));    if (p!=NULL)    {        p->h        = 0;        p->w        = 0;        p->pitch    = 0;        p->pimg     = NULL;        p->flags    = FvsImageGray; /* 缺省的标记 */        }    return (FvsImage_t)p;}/******************************************************************************  * 功能:销毁一个图像对象  * 参数:image  指向图像对象的指针  * 返回:无******************************************************************************/void ImageDestroy(FvsImage_t image){    iFvsImage_t* p = NULL;    if (image==NULL)        return;    (void)ImageSetSize(image, 0, 0);    p = image;    free(p);}/******************************************************************************  * 功能:设置图像标记,该操作大部分由库函数自动完成  * 参数:image  指向图像对象的指针  *       flag   标记  * 返回:错误编号******************************************************************************/FvsError_t ImageSetFlag(FvsImage_t img, const FvsImageFlag_t flag){    iFvsImage_t* image = (iFvsImage_t*)img;    image->flags = flag;     return FvsOK;}/******************************************************************************  * 功能:获得图像标记  * 参数:image  指向图像对象的指针  * 返回:图像标记******************************************************************************/FvsImageFlag_t ImageGetFlag(const FvsImage_t img){    iFvsImage_t* image = (iFvsImage_t*)img;    return image->flags; }/******************************************************************************  * 功能:设置一个图像对象的大小  * 参数:image   指向图像对象的指针  *       width   图像宽度  *       height  图像高度  * 返回:错误编号******************************************************************************/FvsError_t ImageSetSize(FvsImage_t img, const FvsInt_t width, 						const FvsInt_t height){    iFvsImage_t* image = (iFvsImage_t*)img;    FvsError_t nRet = FvsOK;    FvsInt_t newsize = width*height;    /* size为0的情况 */    if (newsize==0)    {        if (image->pimg!=NULL)        {            free(image->pimg);            image->pimg = NULL;            image->w = 0;            image->h = 0;            image->pitch = 0;        }        return FvsOK;    }    if (image->h*image->w != newsize)    {        free(image->pimg);        image->w = 0;        image->h = 0;        image->pitch = 0;        /* 申请内存 */        image->pimg = (uint8_t*)malloc((size_t)newsize);    }    if (image->pimg == NULL)        nRet = FvsMemory;    else    {        image->h = height;        image->w = width;        image->pitch = width;    }    return nRet;}/******************************************************************************  * 功能:拷贝图像  * 参数:destination  指向目标图像对象的指针  *       source       指向源图像对象的指针  * 返回:错误编号******************************************************************************/FvsError_t ImageCopy(FvsImage_t destination, const FvsImage_t source){    iFvsImage_t* dest = (iFvsImage_t*)destination;    iFvsImage_t* src  = (iFvsImage_t*)source;    FvsError_t nRet = FvsOK;    nRet = ImageSetSize(dest, src->w, src->h);        if (nRet==FvsOK)        memcpy(dest->pimg, src->pimg, (size_t)src->h*src->w);    /* 拷贝标记 */    dest->flags = src->flags;    return nRet;}/******************************************************************************  * 功能:清空图像  * 参数:image  指向图像对象的指针  * 返回:错误编号******************************************************************************/FvsError_t ImageClear(FvsImage_t img){    return ImageFlood(img, 0);}/******************************************************************************  * 功能:设置图像中所有象素为特定值  * 参数:image  指向图像对象的指针  *       value  要设定的值  * 返回:错误编号******************************************************************************/FvsError_t ImageFlood(FvsImage_t img, const FvsByte_t value){    FvsError_t nRet = FvsOK;    iFvsImage_t* image = (iFvsImage_t*)img;    if (image==NULL) return FvsMemory;    if (image->pimg!=NULL)        memset(image->pimg, (int)value, (size_t)(image->h*image->w));    return nRet;}/******************************************************************************  * 功能:设置图像中某个象素的值  * 参数:image  指向图像对象的指针  *       x      X轴坐标  *       y      Y轴坐标  *       val    要设定的值  * 返回:无******************************************************************************/void ImageSetPixel(FvsImage_t img, const FvsInt_t x, const FvsInt_t y, 						const FvsByte_t val){    iFvsImage_t* image = (iFvsImage_t*)img;    int address = y * image->w + x;    image->pimg[address] = val;}/******************************************************************************  * 功能:获得图像中某个象素的值  * 参数:image  指向图像对象的指针  *       x      X轴坐标  *       y      Y轴坐标  * 返回:象素的值******************************************************************************/FvsByte_t ImageGetPixel(const FvsImage_t img, const FvsInt_t x, 						const FvsInt_t y){    iFvsImage_t* image = (iFvsImage_t*)img;    /* 数组中的位置 */    int address = y * image->pitch + x;    return image->pimg[address];}/******************************************************************************  * 功能:获得图像缓冲区指针  * 参数:image  指向图像对象的指针  * 返回:指向图像内存缓冲区的指针******************************************************************************/FvsByte_t* ImageGetBuffer(FvsImage_t img){    iFvsImage_t* image = (iFvsImage_t*)img;    if (image==NULL)     	return NULL;    return image->pimg;}/******************************************************************************  * 功能:获得图像宽度  * 参数:image  指向图像对象的指针  * 返回:图像宽度******************************************************************************/FvsInt_t ImageGetWidth(const FvsImage_t img){    iFvsImage_t* image = (iFvsImage_t*)img;    if (image==NULL)     	return -1;    return image->w;}/******************************************************************************  * 功能:获得图像高度  * 参数:image  指向图像对象的指针  * 返回:图像高度******************************************************************************/FvsInt_t ImageGetHeight(const FvsImage_t img){    iFvsImage_t* image = (iFvsImage_t*)img;    if (image==NULL)     	return -1;    return image->h;}/******************************************************************************  * 功能:获得图像缓冲区的大小  * 参数:image  指向图像对象的指针  * 返回:缓冲区大小******************************************************************************/FvsInt_t ImageGetSize(const FvsImage_t img){    iFvsImage_t* image = (iFvsImage_t*)img;    if (image==NULL)     	return 0;    return image->h * image->w;}/******************************************************************************  * 功能:获得图像倾斜度  * 参数:image  指向图像对象的指针  * 返回:倾斜度******************************************************************************/FvsInt_t ImageGetPitch(const FvsImage_t img){    iFvsImage_t* image = (iFvsImage_t*)img;    if (image==NULL)     	return -1;    return image->pitch;}/******************************************************************************  * 功能:比较两个图像大小  * 参数:image1  指向图像对象1的指针  *       image2  指向图像对象2的指针  * 返回:若两个图像大小相等,返回true;否则返回false******************************************************************************/FvsBool_t ImageCompareSize(const FvsImage_t image1, const FvsImage_t image2){    if (ImageGetWidth(image1)!=ImageGetWidth(image2))        return FvsFalse;    if (ImageGetHeight(image1)!=ImageGetHeight(image2))        return FvsFalse;    return FvsTrue;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -