一、绘图操作---画抛物线
void parabola(IplImage *image, CvPoint pL, CvPoint pM, CvPoint pR, const CvScalar &color, int thickness) { double x1, y1, x2, y2, x3, y3, a, b, c; x1 = (double)pL.x; y1 = (double)pL.y; x2 = (double)pM.x; y2 = (double)pM.y; x3 = (double)pR.x; y3 = (double)pR.y; a = ((y1-y2)/(x1-x2)-(y1-y3)/(x1-x3)) / (x2-x3); b = (y1-y2)/(x1-x2)-a*(x1+x2); c = y1-a*x1*x1-b*x1; //x的变化范围是[x1, x3],三像素画一个点 int x = 0; double y = 0; vector<CvPoint> pt; for (x = int(x1); x <= int(x3); x = x+3) { y = a * double(x) * double(x) + b * double(x) + c; pt.push_back(cvPoint(x, int(y))); } pt.push_back(cvPoint(int(x3), int(y3))); for (size_t i = 0; i < pt.size()-1; ++ i) { cvLine(image, pt[i], pt[i+1], color); } }
二.绘图操作-画圆
#include "cv.h" #include "highgui.h" #include <stdio.h> #include <../opencv2/core/core.hpp> using namespace std; using namespace cv; int main(int argc,char **argv) { //圆心 Point center = Point(255,255); //半径 int r = 100; //承载图像 Mat picture(500,500,CV_8UC3,Scalar(255,255,255)); //参数为:承载的图像、圆心、半径、颜色、粗细、线型 circle(picture,center,r,Scalar(0,0,0),-1); imshow("底板",picture); waitKey(0); }
效果如图所示:
其中可以通过把线的粗细设置为-1来画实心的图形