opencv学习笔记7 绘制多边形

news/2024/7/21 7:33:17 标签: opencv, 图像处理

函数原型:

CVAPI(void)  cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,
                         int is_closed, CvScalar color, int thickness CV_DEFAULT(1),
                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );


第一个参数:CvArr* img ::源图像,可画多边形于这个图片上;

第二个参数:CvPoint** pts:折线的顶点指针数组,也就是相应各个顶点的度度座标;

第三个参数:const int* npts:折线的顶点个数数组,也就是我现在要画两个多边形,一个是4个顶点,另一个多边形是5个顶点,那么这个数组为:int npts[2] = {4,5};

第四个参数:int contours:折线的线段数量,如第三个参数说明所示,我想画两个多边形,那这个参数就是2,如果想画4个多边形,这个参数就是4,以此类推;

第五个参数:int is_closed:标示所示多边形是否是封闭的,这个很容易理解;

第六个参数:CvScalar color:所画多边形的线段颜色或是填充颜色;

第七个参数:int line_type CV_DEFAULT:线段的粗细;

代码示例如下:

#include<cv.h>
#include<highgui.h>
using namespace std;

void main()
{
	IplImage* image = cvLoadImage("C:\\Users\\lenovo\\Desktop\\11.png");
	cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
	CvPoint cvrve1[] = { 10, 10, 10, 100, 100, 100, 100, 10 };
	CvPoint cvrve2[] = { 30, 30, 30, 130, 130, 130, 130, 30 ,150,20};
	CvPoint* cvrver[2] = { cvrve1, cvrve2 };  //折线的顶点指针数组,也就是相应各个顶点的度度座标;	
	int npts[2] = { 4, 5 };	                  //拆线的顶点个数数组
	int contous = 2;                         //折线的线段数量                     
	int iscurveclosed = 1;                   //标示所示多边形是否是封闭的
	int thickline = 1;
	cvPolyLine(image, cvrver, npts, contous, iscurveclosed, CV_RGB(255, 0, 0), thickline);
	//cvFillPoly(image, cvrver, npts, contous, CV_RGB(0,255,255),thickline);
	cvShowImage("test", image);
	cvWaitKey(0);
	cvReleaseImage(&image);
	cvDestroyAllWindows();
}

函数运行结果如下:


另一个画多边形的函数:

CVAPI(void)  cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,
                         int contours, CvScalar color,
                         int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );

参数与上现一个函数一样,与上一个函数的区别是,这一个函数是填充多边形的,代码示例如下:

#include<cv.h>
#include<highgui.h>
using namespace std;

void main()
{
	IplImage* image = cvLoadImage("C:\\Users\\lenovo\\Desktop\\11.png");
	cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
	CvPoint cvrve2[] = { 30, 30, 30, 130, 130, 130, 130, 30 ,150,20};
	CvPoint* cvrver[1] = { cvrve2 };
	int npts[1] = {  5 };
	int contous = 1;
	int iscurveclosed = 1;
	int thickline = 1;
	cvFillPoly(image, cvrver, npts, contous, CV_RGB(0,255,255),thickline);
	cvShowImage("test", image);
	cvWaitKey(0);
	cvReleaseImage(&image);
	cvDestroyAllWindows();
}
结果如下:






http://www.niftyadmin.cn/n/1691929.html

相关文章

appium使用教程python_Python+Appium+Android的基本使用方法

Appium连接设备的方法运行Appium配置参数测试相机应用只需要改设备序列号即可。获取设备序列号的方法&#xff1a;​ 若测试其它应用需要更改和。​ 获取和设备序列号的方法&#xff1a;from appium import webdriverdeviceName f65c397eb691 # 指定序列号# 配置设备参数desir…

opencv里的norm范数和图像里的深度和通道数的理解和意义和相机标定后对内外参数的质量评估

CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双通道矩阵 CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1 CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2 CV_8UC3 CV_8SC3 CV_16UC3 CV_…

opencv学习笔记8 将文字打印到图片上

用到的主要函数语句是&#xff1a; cvInitFont()、cvPutText() 函数原型及相应参数解释如下&#xff1a; CVAPI(void) cvPutText( CvArr* img, const char* text, CvPoint org,const CvFont* font, CvScalar color );img---图片指针(需要说明的是&#xff0c;CvArr* 等价于…

卡尔曼滤波器的理解,C代码实现,和opencv里面KalmanFilter 的使用

现实可以使用的博客&#xff1a;Kalman滤波器的历史渊源 其中截取的可以用的&#xff1a; 背景&#xff1a; 卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器), 它能够从一系列的不完全及包含噪声的测量中&#xff0c;估计动态系统的状态。卡尔曼滤波的一个典型实例是从一组…

python 类继承 父类初始化_python中子类调用父类的初始化方法

python和其他面向对象语言类似&#xff0c;每个类可以拥有一个或者多个父类&#xff0c;它们从父类那里继承了属性和方法。如果一个方法在子类的实例中被调用&#xff0c;或者一个属性在子类的实例中被访问&#xff0c;但是该方法或属性在子类中并不存在&#xff0c;那么就会自…

虚拟运行环境管理工具Vagrant详细使用教程

文章目录前言一、下载安装Vargant二、自定义vagrant相关安装路径2.1、自定义box安装存储位置2.2、自定义虚拟机安装目录三、配置详解四、命令大全整理五、实战5.1、安装一个centos7虚拟机5.1.1、提前准备镜像centos74.1.2、初始化centos74.1.3、启动与连接centos7&#xff08;v…

OpenCV学习笔记9 常用的OpenCV函数速查

常用的OpenCV函数速查 1、cvLoadImage&#xff1a;将图像文件加载至内存&#xff1b; 2、cvNamedWindow&#xff1a;在屏幕上创建一个窗口&#xff1b; 3、cvShowImage&#xff1a;在一个已创建好的窗口中显示图像&#xff1b; 4、cvWaitKey&#xff1a;使程序暂停&#xff0c;…

mybatis逆向工程_Mybatis之逆向工程

【53】一、什么是逆向工程Mybatis提供了一个逆向工程工具&#xff0c;通过逆向工程&#xff0c;可以帮助程序员根据单表来生成po类、mapper映射文件、mapper接口。二、下载逆向工程mybatis/generator​github.com三、打开eclipse选择Flie >> import >> General >…