多边形检测区域的缩放

本文介绍了一个多边形检测区域缩放的方法,旨在保持检测的准确性。通过已知的多边形顶点坐标和各边的平移量,确保在缩放过程中不发生形变。作者分享了实现思路,包括代码优化需求和最终效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间在做多边形检测区域的缩放,为了保证检测的准确性,需要对检测区域进行合理的缩放。而检测区域的标记通过鼠标点击窗口,获取多边形的顶点位置,连接顶点获取。代码写的比较坑,但是这是自己的心血,接下来需要在这个思路的基础上优化代码。继续学习……

已知:

1.多边形各顶点及各边上的点坐标,如pointArray[0] = Point(200,200);pointArray[1] = Point(400,200);pointArray[2] = Point(600,200);pointArray[3] = Point(800,200);
 pointArray[4] = Point(850,250); pointArray[5] = Point(900,300);pointArray[6] = Point(800,350); pointArray[7] = Point(800,400);pointArray[8]= Point(200,400);pointArray[9] = Point(200,300);红色标记的点才为多变行的顶点,其他点是操作用户在画检测区域时人为带入的干扰因素。

2.多边形各边按照对应垂线的平移量shift

条件:

多边形在缩放的过程中不能发生形变

求解:

按照shift平移量,获取多边形缩放后的顶点坐标位置

效果:

原始图片:图中没有凸显标记出边缘上的点

效果图:

图中不同的线条表示缩放的不同尺寸,这里是循环显示了初始平移量shift后shift++后的所有缩放图形。

蔚蓝色的图形表示可以缩放的最小图片,在缩放,多边形将会发生形变。

实现:

.h文件

#pragma once
#include <opencv2\opencv.hpp>
using namespace cv;
bool reduceScale(Point* vertexCoordinateSet, int* numSrcVertex,unsigned int scaleDown);//获取缩放后的多边形的各顶点
bool computeSlope(Point *pointSet, int	n, float* slope);//计算各边的斜率(考虑了垂直和水平的情况)
bool extractPoint(Point *srcInputPoint, int *numVertex);//去除非顶点的坐标,保留真正的顶点坐标


 

 cpp文件

#include "polygonScaleZoom.h"

bool reduceScale(Point* vertexCoordinateSet, int* numSrcVertex,unsigned int scaleDown)
{
	//使用范围:凸多边形
	//vertexCoordinateSet:表示输入多边形顶点坐标集(需要按照顺时针或者逆时针顺序排列)
	//numVertex:表示多边形顶点个数
	//scaleDown:表示多边形每条边向内平行移动的像素个数
	int &numVertex = *numSrcVertex;
	if (!vertexCoordinateSet || numVertex <3 || !scaleDown)
	{
		return false;
	}
	bool statusExtract;
	statusExtract = extractPoint(vertexCoordinateSet,&numVertex);
	if (!statusExtract)
	{
		return false;
	}
	Point polyCenter;   //多边形中心点:表示多边形所有顶点的均值
	float *straightSlope = new float[numVertex]();//直线的斜率
	int	*signVerticalSlope = new int[numVertex]();//垂直方向标记位,1表示与x轴垂直,0则相反
	int	*signHorizontalSlope = new i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值