OpenCV-学习历程7- 在图片上绘制形状与文字(cv::Point/cv::Scalar) (圆,矩形,直线,随机直线,文字)

OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。

   一.OpenCV 中(cv::Point/cv::Scalar)API

    

  

   二.代码实现

#include <opencv2/opencv.hpp>
#include <iostream>


using namespace std;
using namespace cv;
Mat bgImage;
const char* drawdemo_win = "draw shapes and text demo.";

void Mylines(); //子函数声明
void MyRectangle();
void MyElipse();
void MyCircle();
void MyPolygon();
void RandomLineDemo(); //随机线

int main(int argc, char** argv) {
	//Step1 读取照片并显示
	bgImage = imread("E:/OpenCVLearning/Project/source_image/image1.jpg"); //注意斜线方向
	if (!bgImage.data) {
		printf("Can not read the image, please check the address...");
		return -1;
	}

	Mylines();
	MyRectangle();
	MyElipse();
	MyCircle();
	MyPolygon();
	//RandomLineDemo();
	putText(bgImage,"Hello World!",Point(300,300),CV_FONT_BLACK,1.0,Scalar(12,23,200),2,8);

	namedWindow(drawdemo_win, CV_WINDOW_AUTOSIZE);
	imshow(drawdemo_win, bgImage);

	waitKey(0);
	return 0;

}



void Mylines(){ //子函数实现
	
	//两种不同定义点的方法
	Point p1 = Point(20, 30);
	Point p2;

	p2.x = 300;
	p2.y = 300;

	Scalar color = Scalar(0,0,255);
	line(bgImage,p1,p2,color,1,LINE_8);  //!!在图片中绘制p1~p2连线,LINE_AA反锯齿
}

void MyRectangle() {
	Rect rect = Rect(100,100,200,200);  //!! (顶点x,顶点y,宽度,高度)

	Scalar color = Scalar(0, 0, 255);
	rectangle(bgImage, rect, color, 2, LINE_8);
}

void MyElipse() {
	Scalar color = Scalar(0, 255, 0);
	
	//图片底版,中心点,长轴短轴长度,倾斜程度,原点,旋转角度(绘制完整的椭圆还是椭圆弧度?),颜色,线粗细,线型
	ellipse(bgImage,Point(bgImage.cols/2, bgImage.rows/2), Size(bgImage.cols/4, bgImage.rows/8), 90,0,360,color,2,LINE_8);

}

void MyCircle() {
	Scalar color = Scalar(0, 255, 255);
	Point center = Point(bgImage.cols/2, bgImage.rows /2);

	//图片底版,圆心,半径,颜色,线粗细,线型
	circle(bgImage,center,150,color,2,8);
}

void MyPolygon() {
	Point pts[1][5];  //设置一个二维数组
	pts[0][0]=  Point(100,100);
	pts[0][1] = Point(100, 200);
	pts[0][2] = Point(200, 200);
	pts[0][3] = Point(200, 100);
	pts[0][4] = Point(100, 100);


	const Point* ppts[] = { pts[0] };
	int  npt[] = {5};
	Scalar color = Scalar(255, 12, 255);

	fillPoly(bgImage,ppts,npt,1,color,8);
}

void RandomLineDemo() {
	RNG rng(12345);   //随机数生成!!!

	Point pt1;
	Point pt2;

	Mat bg = Mat::zeros(bgImage.size(), bgImage.type());
	namedWindow("Random Line demo", CV_WINDOW_AUTOSIZE);

	
	for(int i=0; i<100000;i++){
	pt1.x = rng.uniform(0, bgImage.cols);     //!!!rng.uniform(0,255) 随机生成0~255之间的数
	pt1.y = rng.uniform(0, bgImage.rows);
	pt2.x = rng.uniform(0, bgImage.cols);
	pt2.y = rng.uniform(0, bgImage.rows);

	Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));//!!!rng.uniform(0,255) 随机生成0~255之间的数
	line(bg, pt1, pt2, color, 1, LINE_8);
	imshow("Random Line demo", bg);

	if(waitKey(50) > 0) {
			break;
		}
	}

}

 三.代码效果

猜你喜欢

转载自blog.csdn.net/weixin_42503785/article/details/113913580
今日推荐