2012-04-18 40 views
6

Quiero dibujar una onda sinusoidal en una imagen usando openCV. He desarrollado el siguiente código, pero la salida no está llegando como se esperaba:dibujando onda sinusoidal usando opencv

#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include "opencv/cv.h" 
#include "opencv/highgui.h" 
void main() 
{ 
double y[100]; 
     float x; 


    for(x=0;x<100;x++) 
    { 
     y[(int)floor(x)]=sin(x); 

    } 

    IplImage *grf = cvCreateImage(cvSize(200, 200), IPL_DEPTH_8U, 1); 


    for(int x=0;x<100;x++) 
    { 
    cvLine(grf ,       /* the dest image */ 
      cvPoint(x, y[x]), /* start point */ 

      cvPoint(x+1, y[x+1]),   /* end point */ 
      CV_RGB(255, 0, 0),  /* the color; green */ 
      2, 4, 0);     /* thickness, line type, shift */ 

    } 


    cvNamedWindow("img", CV_WINDOW_AUTOSIZE); 
    cvShowImage("img", grf); 
    cvWaitKey(0); 
    cvDestroyWindow("img"); 
    cvReleaseImage(&grf); 
} 

me han verificado los valores que entra y variedad es correcta, y se representan estos valores y utilizando MATLAB. La trama MATLAB viene en onda sinusoidal. ¿Puedes decirme por qué no estoy obteniendo la trama correcta usando el código anterior?

Mi diagrama de salida de onda sinusoidal es el siguiente: se puede ver que acabo de obtener una línea horizontal en lugar de la onda sinusoidal. ¿Alguna ayuda con respecto a esto?

enter image description here

resuelto: Después de seguir la respuesta que obtuve la siguiente imagen:

enter image description here Gracias

Respuesta

6

La función sin que devuelve un valor [-1: 1], por lo que se está configurando coordenadas entre la línea 0 y 1 en su imagen. Es necesario aumentar la amplitud de su sin, cambiar su valor cero y reducir la frecuencia de la onda senoidal (como el pecado acepta ángulo en radianes, por lo que pasar un periodo de 4 pasos):

y[(int)floor(x)]=10 + 10*sin(2*.1*PI*x); 

Así , podrás ver una onda sinusoidal.

+0

Perfecto !! gracias por su rápida ayuda – geeta

+0

@geeta ¡De nada! – Alex

+0

usó esto en su lugar, y [(int) piso (x)] = 100 + 20 * sen (0.4 * .1 * PI * x) siguiendo sus sugerencias; la trama está arriba. Gracias – geeta

0
  • Justo donde establece el valor de píxel para mostrar la onda sinusoidal, agregue un desplazamiento. Como la imagen es de 200x200, intente agregar 100,100 a x, y. Esto debería darte una ola desde el centro en adelante
Cuestiones relacionadas