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

📄 klt_util.c

📁 KLT: An Implementation of the Kanade-Lucas-Tomasi Feature Tracker KLT: An Implementation of the
💻 C
字号:
/********************************************************************* * klt_util.c *********************************************************************//* Standard includes */#include <assert.h>#include <stdlib.h>  /* malloc() */#include <math.h>		/* fabs() *//* Our includes */#include "base.h"#include "error.h"#include "pnmio.h"#include "klt.h"#include "klt_util.h"/*********************************************************************/float _KLTComputeSmoothSigma(  KLT_TrackingContext tc){  return (tc->smooth_sigma_fact * max(tc->window_width, tc->window_height));}/********************************************************************* * _KLTCreateFloatImage */_KLT_FloatImage _KLTCreateFloatImage(  int ncols,  int nrows){  _KLT_FloatImage floatimg;  int nbytes = sizeof(_KLT_FloatImageRec) +    ncols * nrows * sizeof(float);  floatimg = (_KLT_FloatImage)  malloc(nbytes);  if (floatimg == NULL)    KLTError("(_KLTCreateFloatImage)  Out of memory");  floatimg->ncols = ncols;  floatimg->nrows = nrows;  floatimg->data = (float *)  (floatimg + 1);  return(floatimg);}/********************************************************************* * _KLTFreeFloatImage */void _KLTFreeFloatImage(  _KLT_FloatImage floatimg){  free(floatimg);}/********************************************************************* * _KLTPrintSubFloatImage */void _KLTPrintSubFloatImage(  _KLT_FloatImage floatimg,  int x0, int y0,  int width, int height){  int ncols = floatimg->ncols;  int offset;  int i, j;  assert(x0 >= 0);  assert(y0 >= 0);  assert(x0 + width <= ncols);  assert(y0 + height <= floatimg->nrows);  fprintf(stderr, "\n");  for (j = 0 ; j < height ; j++)  {    for (i = 0 ; i < width ; i++)  {      offset = (j+y0)*ncols + (i+x0);      fprintf(stderr, "%6.2f ", *(floatimg->data + offset));    }    fprintf(stderr, "\n");  }  fprintf(stderr, "\n");}	/********************************************************************* * _KLTWriteFloatImageToPGM */void _KLTWriteFloatImageToPGM(  _KLT_FloatImage img,  char *filename){  int npixs = img->ncols * img->nrows;  float mmax = -999999.9f, mmin = 999999.9f;  float fact;  float *ptr;  uchar *byteimg, *ptrout;  int i;  /* Calculate minimum and maximum values of float image */  ptr = img->data;  for (i = 0 ; i < npixs ; i++)  {    mmax = max(mmax, *ptr);    mmin = min(mmin, *ptr);    ptr++;  }	  /* Allocate memory to hold converted image */  byteimg = (uchar *) malloc(npixs * sizeof(uchar));  /* Convert image from float to uchar */  fact = 255.0f / (mmax-mmin);  ptr = img->data;  ptrout = byteimg;  for (i = 0 ; i < npixs ; i++)  {    *ptrout++ = (uchar) ((*ptr++ - mmin) * fact);  }  /* Write uchar image to PGM */  pgmWriteFile(filename, byteimg, img->ncols, img->nrows);  /* Free memory */  free(byteimg);}/********************************************************************* * _KLTWriteFloatImageToPGM */void _KLTWriteAbsFloatImageToPGM(  _KLT_FloatImage img,  char *filename,float scale){  int npixs = img->ncols * img->nrows;  float fact;  float *ptr;  uchar *byteimg, *ptrout;  int i;  float tmp;	  /* Allocate memory to hold converted image */  byteimg = (uchar *) malloc(npixs * sizeof(uchar));  /* Convert image from float to uchar */  fact = 255.0f / scale;  ptr = img->data;  ptrout = byteimg;  for (i = 0 ; i < npixs ; i++)  {    tmp = (float) (fabs(*ptr++) * fact);    if(tmp > 255.0) tmp = 255.0;    *ptrout++ =  (uchar) tmp;  }  /* Write uchar image to PGM */  pgmWriteFile(filename, byteimg, img->ncols, img->nrows);  /* Free memory */  free(byteimg);}

⌨️ 快捷键说明

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