gpt4 book ai didi

c++ - 使用opencv绘制正弦波

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:18 26 4
gpt4 key购买 nike

我想使用 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 绘图呈正弦波。你能告诉我为什么我没有使用上面的代码得到正确的情节吗?

我的正弦波输出图如下:你可以看到我只是得到一条水平线而不是正弦波。有什么帮助吗?

enter image description here

已解决:按照答案后我得到了下图:

enter image description here谢谢

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com