鉴于部分读者的要求,这里给出上篇博文图片的代码(OpenCV)
int main()
{
Mat_<uchar> CSYS;
CSYS.create(600,600); //定义灰度图像大小
Scalar color(0,0,0);
line(CSYS,Point(100,300),Point(500,300),color,2); // X轴
line(CSYS,Point(300,100),Point(300,500),color,2); // Y轴
/* 箭头函数稍后给出 */
arrow(CSYS,Point(484,300),Point(500,300),color,2,30); // X轴箭头
arrow(CSYS,Point(300,116),Point(300,100),color,2,30); // Y轴箭头
putText(CSYS,"t",Point(490,330),FONT_HERSHEY_PLAIN,2,color_word,2); //坐标轴文本
putText(CSYS,"O",Point(270,330),FONT_HERSHEY_PLAIN,2,color_word,2);
putText(CSYS,"f(x)",Point(310,130),FONT_HERSHEY_PLAIN,2,color_word,2);
line(CSYS,Point(220,300),Point(220,220),color,2); //函数划线
line(CSYS,Point(220,220),Point(380,220),color,2);
line(CSYS,Point(380,220),Point(380,300),color,2);
putText(CSYS,"t0", Point(370,330),FONT_HERSHEY_PLAIN,1,color_word,1);//函数文本
putText(CSYS,"-t0",Point(200,330),FONT_HERSHEY_PLAIN,1,color_word,1);
putText(CSYS," A", Point(310,210),FONT_HERSHEY_PLAIN,1,color_word,1);
namedWindow("坐标系",CV_WINDOW_AUTOSIZE);
imshow("坐标系",CSYS);
waitKey(0);
return 0;
}
因为OpenCV库中没有自带的箭头函数,这里给出。
void arrow(cv::Mat &img,cv::Point p1,cv::Point p2,cv::Scalar &color,int thickness,int alpha)
{
Point arrow;
const double PI = 3.1415926;
float len=sqrt((float)((p2.y-p1.y)*(p2.y-p1.y)+(p1.x-p2.x)*(p1.x-p2.x)));//计算俩点间距离
double angle = atan2((double)(p2.y-p1.y), (double)(p2.x-p1.x)); //**注意这里角度的计算结果为弧度制**
line(img, p1, p2, color, thickness);
/*下边画箭头的俩根斜线*/
arrow.x =(int)(p2.x - len * cos(angle+PI*alpha/180));
arrow.y =(int)(p2.y - len * sin(angle+PI*alpha/180));
line(img, arrow, p2, color, thickness);
arrow.x =(int)(p2.x - len * cos(angle-PI*alpha/180));
arrow.y =(int)(p2.y - len * sin(angle-PI*alpha/180));
line(img, arrow, p2, color, thickness);
}
效果图:
箭头函数来自:mingzhentanwo
另外附上部分CV函数名:
Line //画直线;
Rectangle //矩形
Circle //圆
Ellipse //椭圆
EllipseBox //外接矩形描述椭圆
PutText //在图像上输出一些文本
CreateTrackbar //创建一个滚动条
Smooth //对图像进行平滑处理
GetSize //当前图像结构的大小
CreateVideoWriter //创建一个写入设备以便逐帧将视频流写入视频文件
WriteFrame //逐帧将视频流写入文件
ReleaseVideoWriter //释放CvVideoWriter结构开辟的内存空间
Abs //计算数组中所有元素的绝对值
AbsDiff //计算两个数组差值的绝对值
AbsDiffS //计算数组和标量差值的绝对值
Copy //把数组中的值复制到另一个数组中
CountNonZero //计算数组中非0值的个数
Normalize //将数组中元素进行归一化
/* 下边一些骚算法 */
FindContours //从二值图像中寻找轮廓
DrawContours //绘制轮廓
ContourPerimeter //轮廓长度
EqualizeHist //直方图均衡化;
CreateHist //创建一新直方图
MakeHistHeaderForArray //根据已给出的数据创建直方图
NormalizeHist //归一化直方图
ThreshHist //直方图阈值函数
CalcHist //从图像中自动计算直方图
CompareHist //用于对比两个直方图的相似度