티스토리 뷰
반응형
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void onMouse(int, int, int, int, void *);
void dusflq(Point2f, Point2f, Point2f);
int cnt = 0;
double a, b, c;
Mat image(500, 500, CV_8UC3, Scalar(255, 100, 100));
Point2f m_pt1, m_pt2, m_pt3;
int main() {
line(image, Point(0, 480), Point(499, 480), Scalar(0), 1); // x축
line(image, Point(20, 0), Point(20, 499), Scalar(0), 1); // y축
imshow("포물선", image);
setMouseCallback("포물선", onMouse, 0);
waitKey();
return 0;
}
void onMouse(int event, int x, int y, int flags, void * params) {
switch (event) {
case EVENT_LBUTTONDOWN:
char text[20] = "";
Point2f center(x, y), pts[4];
circle(image, center, 10, Scalar(20), 1);
sprintf(text, "(%d, %d)", (int)center.x, (int)center.y);
putText(image, text, Point(center.x - 30, center.y + 25), 2, 0.4, Scalar(0), 1);
if (cnt == 0) {
m_pt1 = Point2f(x - 20, 480 - y);
printf("pt1.x : %lf, pt1.y : %lf\n", m_pt1.x, m_pt1.y);
}
else if (cnt == 1) {
m_pt2 = Point2f(x - 20, 480 - y);
printf("pt2.x : %lf, pt2.y : %lf\n", m_pt2.x, m_pt2.y);
}
else if (cnt == 2) {
m_pt3 = Point2f(x - 20, 480 - y);
printf("pt3.x : %lf, pt3.y : %lf\n", m_pt3.x, m_pt3.y);
dusflq(m_pt1, m_pt2, m_pt3);
Point ps(20, 480); // 시작 지점
int x, y, xx, yy;
for (int x = 0; x < 500; x++) {
y = x * x * a + x * b + c;
xx = ps.x + x;
yy = ps.y - y;
// 출력 범위 제한
xx = max(min(500 - 1, xx), 0);
yy = max(min(500 - 1, yy), 0);
image.at<Vec3b>(yy, xx) = Vec3b(255, 255, 255);
}
cnt = -1;
}
imshow("포물선", image);
cnt++;
break;
}
}
void dusflq(Point2f pt1, Point2f pt2, Point2f pt3) {
Mat abc;
Mat A = (Mat_<float>(3, 3) << pow(pt1.x, 2), pt1.x, 1, pow(pt2.x, 2), pt2.x, 1, pow(pt3.x, 2), pt3.x, 1);
Mat B = (Mat_<float>(3, 1) << pt1.y, pt2.y, pt3.y);
solve(A, B, abc);
cout << "Coefficients:\n " << abc << endl;
a = abc.at<float>(0);
b = abc.at<float>(1);
c = abc.at<float>(2);
cout << "Equation:\n y = " << a << "x^2 + " << b << "x + " << c << endl;
}
sprintf 에러: https://j0n9m1n1.com/254
'C, C++ > openCV' 카테고리의 다른 글
C/C++ openCV 두개 네모 회전 및 바운딩영역 (2) | 2019.03.19 |
---|
댓글
티스토리 방명록
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
Blog is powered by
Tistory / Designed by
Tistory
Contact: j0n9m1n1@gmail.com
Contact: j0n9m1n1@gmail.com