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;
}
效果图如下,可以更改频率和周期。