OpenCV 画圆circle、画椭圆ellipse

画圆 circle、 画椭圆 ellipse

  • 1. 函数定义
    • 1.1 cicle
    • 1.2 验证circle中参数shift的实际作用
    • 1.3 ellipse
      • 1.3.1 第一种方法
      • 1.3.2 第二种方法
  • 2. 代码实例

1. 函数定义

1.1 cicle

OpenCV官方文档 circle()

	void circle(
		InputOutputArray img, //在此图像上画圆
		Point center, //圆心
		int radius,//半径
		const Scalar& color, //画笔颜色
		int thickness = 1,//线宽
		int lineType = LINE_8, //边缘类型
		int shift = 0 //中心坐标和半径的缩小倍数
		);
  • 这个画圆的函数的其他参数都很好理解,但是最后一个参数,shift 我在学习的时候有一点费解,最终通过实验确定了它的真正意义。它表示将坐标和半径缩小多少倍。
  • 比如圆的圆心坐标是 (200,200)半径是100,如果将shift设置为1,那么画出来的圆的圆心坐标应该是(100,100),半径是50
  • 如果将shift设置为2,那么画出来的圆的圆心坐标应该是(50,50),半径是25.

1.2 验证circle中参数shift的实际作用

#include "stdafx.h"
#include 
#include 
using namespace cv;
using namespace std;

int main()
{
	Mat img = imread("画板.bmp");

	//画圆
	circle(img, Point(200, 200), 100, Scalar(255, 0, 0), 1, 8, 0);
	line(img, Point(200, 200), Point(300, 200), Scalar(0, 0, 255));

	circle(img, Point(200, 200), 100, Scalar(255, 0, 0), 1, 8, 1);
	line(img, Point(100, 100), Point(150, 100), Scalar(0, 0, 2552));

	circle(img, Point(200, 200), 100, Scalar(255, 0, 0), 1, 8, 2);
	line(img, Point(50, 50), Point(75, 50), Scalar(0, 0, 255));

	imshow("画板", img);

	waitKey(0);
    return 0;
}

OpenCV 画圆circle、画椭圆ellipse_第1张图片

1.3 ellipse

OpenCV官方文档 ellipse()

  • 画椭圆有两种方法:可以由RotatedRect来确定,也可以使用更复杂的中心点、长轴和短轴尺寸,角度等来确定。

1.3.1 第一种方法

	void ellipse(
		InputOutputArray img, 
		const RotatedRect& box, 
		const Scalar& color,
		int thickness = 1, 
		int lineType = LINE_8
		);
  • 第一种方法比第二种方法的参数简练不少,但是你得先知道RotatedRect是个什么东西。一起来复习一下吧:
	RotatedRect::RotatedRect(
		const Point2f& _center, 
		const Size2f& _size, 
		float _angle
		)

1.3.2 第二种方法

	void ellipse(
		InputOutputArray img, 
		Point center, //椭圆中心坐标
		Size axes,//长轴和短轴
		double angle, 
		double startAngle, 
		double endAngle,
		const Scalar& color,
		int thickness = 1,
		int lineType = LINE_8,
		int shift = 0
		);
  • 对照下面这个图看参数,耐心看一会,然后你就晕了。
  • 其实最好的办法还是写代码验证一下,自己观察就知道区别了。
  • 需要注意的是,这里的角度单位都是度,并不是弧度哦。
    OpenCV 画圆circle、画椭圆ellipse_第2张图片

2. 代码实例

OpenCV 画圆circle、画椭圆ellipse_第3张图片

#include "stdafx.h"
#include 
#include 
using namespace cv;
using namespace std;

int main()
{
	Mat img = imread("画板.bmp");

	//画圆
	circle(img, Point(200, 200), 100, Scalar(255, 0, 0), 1, 8, 0);
	circle(img, Point(200, 200), 100, Scalar(255, 0, 0), 1, 8, 1);
	circle(img, Point(200, 200), 100, Scalar(255, 0, 0), 1, 8, 2);
	
	//画椭圆(第一种方法)
	ellipse(img, RotatedRect(Point2f(350, 350), Size2f(100, 200), 90), Scalar(0, 0, 0), 1, 8);
	//画椭圆(第二种方法)
	ellipse(img, Point(350, 350), Size(50, 100), 0, 0, 360, Scalar(0, 0, 255), 1, 8, 0);
	ellipse(img, Point(350, 350), Size(50, 100), 45, 0, 360, Scalar(255, 0, 255), 1, 8, 0);
	ellipse(img, Point(350, 350), Size(50, 100), 135, 0, 360, Scalar(0, 255, 255), 1, 8, 0);
	
	imshow("画板", img);
	waitKey(0);
    return 0;
}

你可能感兴趣的:(搞定OpenCV的算子,opencv,计算机视觉,人工智能,画圆,画椭圆)