点和点集(轮廓)关系

16 篇文章 0 订阅
8 篇文章 0 订阅
#include<iostream>
#include<opencv2\core.hpp>
#include<opencv2\imgproc.hpp>
#include<opencv2\highgui.hpp>

using namespace cv;
using namespace std;

/*
	double pointPolygonTest(InputArray contour,Point2f pt,bool measureDist);
	contour:	输入点集
	pt     :	坐标点
	measureDist:是否计算坐标点到轮廓的距离

	当measureDist 为false时,函数返回+1,0,-1,分别对应内,上,外
	当measureDist 为true时,函数返回距离,正负代表位置。
*/
int main()
{
	vector<Point> contour;
	contour.push_back(Point(0, 0));
	contour.push_back(Point(50, 30));
	contour.push_back(Point(100, 100));
	contour.push_back(Point(100, 0));

	Mat img = Mat::zeros(Size(130, 130), CV_8UC1);
	int num = contour.size();//点的数量
	for (int i = 0; i <  num - 1; i++)
	{
		//用直线依次连接轮廓中相邻的点
		line(img, contour[i], contour[i + 1], Scalar(255), 2);
	}
	line(img, contour[num - 1], contour[0], Scalar(255), 2);
	//标注点的位置
	circle(img, Point2f(80, 40), 3, Scalar(255), CV_FILLED);
	circle(img, Point2f(50, 0), 3, Scalar(255), CV_FILLED);
	circle(img, Point2f(40, 80), 3, Scalar(255), CV_FILLED);
	//点在内
	double dist1 = pointPolygonTest(contour, Point2f(80, 40), true);
	cout << "dist1:" << dist1 << endl;
	//点在上
	double dist2 = pointPolygonTest(contour, Point2f(50, 0), true);
	cout << "dist2:" << dist2 << endl;
	//点在外
	double dist3 = pointPolygonTest(contour, Point2f(40, 80), true);
	cout << "dist3:" << dist3 << endl;
	//显示点集围成的轮廓和三个标注点
	imshow("轮廓", img);
	waitKey(0);
	return 0;

}
import cv2
import numpy as np

contour=np.array([[0,0],[50,30],[100,100],[100,0]],np.float32)

dist1=cv2.pointPolygonTest(contour,(80,40),False);
dist2=cv2.pointPolygonTest(contour,(50,0),False);
dist3=cv2.pointPolygonTest(contour,(40,80),False);

print(dist1,dist2,dist3)


dist1=cv2.pointPolygonTest(contour,(80,40),True);
dist2=cv2.pointPolygonTest(contour,(50,0),True);
dist3=cv2.pointPolygonTest(contour,(40,80),True);

print(dist1,dist2,dist3)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&小鹏鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值