OPENCV画波浪线

图像类似正弦线,从百度上找了好久类似的DEMO,没找到,自己用了一个笨方法实现了。

#include <opencv2/opencv.hpp>
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/imgproc/types_c.h>
#include "opencv2/core/core.hpp"
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{

Mat image = imread("test.png");
    if (image.empty())
    {
        cout << "open img failed\n" << endl;
        return -1;
    }

//输入拟合点  
    std::vector<cv::Point> points;
    std::vector<cv::Point> points1;
    std::vector<cv::Point> points2;
    std::vector<cv::Point> points3;
    std::vector<cv::Point> points4;
    std::vector<cv::Point> points5;
    std::vector<cv::Point> points6;
    std::vector<cv::Point> points7;

    for (double x = 0; x < 630; x += 10)
     {
        double y = 5 * cos(x)+100;
        points.push_back(cv::Point(x, abs(y)));
     }
    //绘制折线
    cv::polylines(image, points, false, cv::Scalar(255, 255, 0), 1, 8, 0);
    for (double x = 0; x < 630; x += 10)
     {
        double y = 5 * cos(x)+120;
        points1.push_back(cv::Point(x, abs(y)));
     }
    //绘制折线
    cv::polylines(image, points1, false, cv::Scalar(255, 255, 0), 1, 8, 0);
    for (double x = 0; x < 630; x += 10)
    {
        double y = 5 * cos(x) + 140;
        points2.push_back(cv::Point(x, abs(y)));
    }
    //绘制折线
    cv::polylines(image, points2, false, cv::Scalar(255, 255, 0), 1, 8, 0);
    for (double x = 0; x < 630; x += 10)
    {
        double y = 5 * cos(x) + 160;
        points3.push_back(cv::Point(x, abs(y)));
    }
    //绘制折线
    cv::polylines(image, points3, false, cv::Scalar(255, 255, 0), 1, 8, 0);
    for (double x = 0; x < 630; x += 10)
    {
        double y = 5 * cos(x) + 180;
        points4.push_back(cv::Point(x, abs(y)));
    }
    //绘制折线
    cv::polylines(image, points4, false, cv::Scalar(255, 255, 0), 1, 8, 0);
    for (double x = 0; x < 630; x += 10)
    {
        double y = 5 * cos(x) + 200;
        points5.push_back(cv::Point(x, abs(y)));
    }
    //绘制折线
    cv::polylines(image, points5, false, cv::Scalar(255, 255, 0), 1, 8, 0);
    for (double x = 0; x < 630; x += 10)
    {
        double y = 5 * cos(x) + 220;
        points6.push_back(cv::Point(x, abs(y)));
    }
    //绘制折线
    cv::polylines(image, points6, false, cv::Scalar(255, 255, 0), 1, 8, 0);

    imshow("image", image);
    imwrite("hello.jpg", image);
    waitKey(0);
    return 0;
}

 

效果图如下,可以更改频率和周期。

OPENCV画波浪线