我想使用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);
}
我已经验证了y数组中的值正确,并使用MATLAB绘制了这些y值。 MATLAB图即将出现正弦波。你能告诉我为什么我不能使用上面的代码得到正确的情节。
我的正弦波输出图如下:您可以看到我只是得到一条水平线而不是正弦波。关于这个有什么帮助吗?
已解决:在遵循答案之后,我得到了以下图像:
谢谢
最佳答案
sin
函数返回值[-1:1],因此您要在图像的第0行和第1行之间设置坐标。
您需要增加sin
的幅度,将其移位为零值并降低正弦波的频率(因为sin接受以弧度表示的角度,所以您将分4个周期传递一个周期):
y[(int)floor(x)]=10 + 10*sin(2*.1*PI*x);
因此,您将能够看到正弦波。
关于c++ - 使用opencv绘制正弦波,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10209935/