Porque no emplear cvSet2D. Why we shouldn’t use cvSet2D

Trás implementar la clase para el cambio de espacio de color he querido comprobar cuanta diferencia había entre los distintos métodos:

JETMAP: ha tardado: 9.7 milisegundos
JETMAPFAST: ha tardado: 1.555 milisegundos
HsvMap: ha tardado: 9.702 milisegundos
HsvMapFast: ha tardado: 1.556 milisegundos
HotMap: ha tardado: 9.735 milisegundos
HotMapFast: ha tardado: 1.555 milisegundos
CoolMap: ha tardado: 9.727 milisegundos
CoolMapFast: ha tardado: 1.556 milisegundos
SpringMap: ha tardado: 9.726 milisegundos
SpringMapFast: ha tardado: 1.569 milisegundos
SummerMap: ha tardado: 9.672 milisegundos
SummerMapFast: ha tardado: 1.568 milisegundos
AutumnMap: ha tardado: 9.789 milisegundos
AutumnMapFast: ha tardado: 1.554 milisegundos
WinterMap: ha tardado: 10.007 milisegundos
WinterMapFast: ha tardado: 1.555 milisegundos
GrayMap: ha tardado: 9.924 milisegundos
GrayMapFast: ha tardado: 1.554 milisegundos
BoneMap: ha tardado: 9.714 milisegundos
BoneMapFast: ha tardado: 1.555 milisegundos
CopperMap: ha tardado: 9.961 milisegundos
CopperMapFast: ha tardado: 1.564 milisegundos
PinkMap: ha tardado: 9.681 milisegundos
PinkMapFast: ha tardado: 1.556 milisegundos
LinesMap: ha tardado: 9.96 milisegundos
LinesMapFast: ha tardado: 1.568 milisegundos

Trás ver la evidente ventaja, a continuación expongo como sería el método rápido:

int alto    = entrada->height;
int ancho   = entrada->width;
int step    = entrada->widthStep;
int canales = entrada->nChannels;
uchar* data      = (uchar *)entrada->imageData;

for(int i=0; i < alto;i++)
for(int j=0; j <ancho;j++)
for(int k=0; k < canales;k++)
data[i*step+j*canales+k]= pink[data[i*step+j*canales+k]*3 +2-k];

After develop the class for space color changes, I wanted check the differences between both methods:

JETMAP: takes: 9.7 miliseconds
JETMAPFAST: takes: 1.555 miliseconds
HsvMap: takes: 9.702 miliseconds
HsvMapFast: takes: 1.556 miliseconds
HotMap: takes: 9.735 miliseconds
HotMapFast: takes: 1.555 miliseconds
CoolMap: takes: 9.727 miliseconds
CoolMapFast: takes: 1.556 miliseconds
SpringMap: takes: 9.726 miliseconds
SpringMapFast: takes: 1.569 miliseconds
SummerMap: takes: 9.672 miliseconds
SummerMapFast: takes: 1.568 miliseconds
AutumnMap: takes: 9.789 miliseconds
AutumnMapFast: takes: 1.554 miliseconds
WinterMap: takes: 10.007 miliseconds
WinterMapFast: takes: 1.555 miliseconds
GrayMap: takes: 9.924 miliseconds
GrayMapFast: takes: 1.554 miliseconds
BoneMap: takes: 9.714 miliseconds
BoneMapFast: takes: 1.555 miliseconds
CopperMap: takes: 9.961 miliseconds
CopperMapFast: takes: 1.564 miliseconds
PinkMap: takes: 9.681 miliseconds
PinkMapFast: takes: 1.556 miliseconds
LinesMap: takes: 9.96 miliseconds
LinesMapFast: takes: 1.568 miliseconds

Once we see the advantages of using pointers, I write the code for the fastest way:

int alto    = entrada->height;
int ancho   = entrada->width;
int step    = entrada->widthStep;
int canales = entrada->nChannels;
uchar* data      = (uchar *)entrada->imageData;

for(int i=0; i < alto;i++)
for(int j=0; j <ancho;j++)
for(int k=0; k < canales;k++)
data[i*step+j*canales+k]= pink[data[i*step+j*canales+k]*3 +2-k];
Anuncios
  1. #1 por home jobs uk el marzo 3, 2013 - 3:54 am

    Thanks for your marvelous posting! I seriously enjoyed reading it,
    you can be a great author. I will make certain to bookmark your blog and definitely will come back in the future.
    I want to encourage yourself to continue your great job, have
    a nice weekend!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: