OpenCV之直角坐标系

鉴于部分读者的要求,这里给出上篇博文图片的代码(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		  //用于对比两个直方图的相似度
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值