opencv::点多边形测试
点多边形测试
测试一个点是否在给定的多边形内部,边缘或者外部
double pointPolygonTest(
InputArray contour, // 输入的轮廓
Point2f pt, // 测试点
bool measureDist // 是否返回距离值,如果是false,1表示在内面,0表示在边界上,-1表示在外部,true返回实际距离
)
步骤
构建一张400x400大小的图片, Mat::Zero(, , CV_8UC1)
画上一个六边形的闭合区域line
发现轮廓
对图像中所有像素点做点 多边形测试,得到距离,归一化后显示。
int main(int argc, char** argv) {
const int r = ;
Mat src = Mat::zeros(r * , r * , CV_8UC1);
vector<Point2f> vert();
vert[] = Point( * r / , static_cast<int>(1.34*r));
vert[] = Point( * r, * r);
vert[] = Point( * r / , static_cast<int>(2.866*r));
vert[] = Point( * r / , static_cast<int>(2.866*r));
vert[] = Point( * r, * r);
vert[] = Point( * r / , static_cast<int>(1.34*r));
for (int i = ; i < ; i++) {
line(src, vert[i], vert[(i + ) % ], Scalar(), , , );
}
// 画一个六边型
imshow("input_win", src);
vector<vector<Point>> contours;
vector<Vec4i> hierachy;
Mat csrc;
src.copyTo(csrc);
//边界发现
findContours(csrc, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(, ));
Mat raw_dist = Mat::zeros(csrc.size(), CV_32FC1);
for (int row = ; row < raw_dist.rows; row++) {
for (int col = ; col < raw_dist.cols; col++) {
double dist = pointPolygonTest(contours[], Point2f(static_cast<float>(col), static_cast<float>(row)), true);
raw_dist.at<float>(row, col) = static_cast<float>(dist);
}
}
double minValue, maxValue;
minMaxLoc(raw_dist, &minValue, &maxValue, , , Mat());
Mat drawImg = Mat::zeros(src.size(), CV_8UC3);
for (int row = ; row < drawImg.rows; row++) {
for (int col = ; col < drawImg.cols; col++) {
float dist = raw_dist.at<float>(row, col);
if (dist > ) {
//内部
drawImg.at<Vec3b>(row, col)[] = (uchar)(abs(1.0 - (dist / maxValue)) * );
}
else if (dist < ) {
//外部
drawImg.at<Vec3b>(row, col)[] = (uchar)(abs(1.0 - (dist / minValue)) * );
}
else {
//边缘
drawImg.at<Vec3b>(row, col)[] = (uchar)(abs( - dist));
drawImg.at<Vec3b>(row, col)[] = (uchar)(abs( - dist));
drawImg.at<Vec3b>(row, col)[] = (uchar)(abs( - dist));
}
}
}
imshow("output_win", drawImg);
waitKey();
return ;
}
opencv::点多边形测试的更多相关文章
- windows10(x64)+Qt+opencv配置及测试
本电脑系统:Windows10 64位 要下载的文件: 1.Qt 5.6.0 for Windows 32-bit,下载地址:(可以复制链接地址,用迅雷下载,速度快) http://download. ...
- ubuntu 14.04 安装opencv 3.0 测试
安装opencv 前面步骤参考 http://my.oschina.net/u/1757926/blog/293976 主要修改测试代码 1. 先从sourceforge上下载OpenCV的源码 2. ...
- 【Java 其他】Java opencv配置及测试
毕竟研究生做cv,所以这里还是测试一下java上使用opencv,参考 这里 import org.opencv.core.Core; import org.opencv.core.CvType; i ...
- OpenCV 传统分割测试
github官网源文件:https://github.com/opencv/opencv/tree/master/samples/python 最好是先克隆整个仓库下来,再测试里面的:floodfil ...
- vs2012配置opencv及简单测试
为visual studio2012搭建openCV平台,实现打开图片. 实现步骤: 1.1.配置环境变量 基于win7操作系统的环境配置步骤: 1.1.1 计算机—>属性—>更改设置—& ...
- OpenCV安装和测试
参考链接:http://blog.csdn.net/bruce_zeng/article/details/7961153 OpenCv下载链接:http://sourceforge.net/proje ...
- [opencv]approxDP多边形逼近获取四边形轮廓信息
#include "opencv2/opencv.hpp" #include <iostream> #include <math.h> #include & ...
- OpenCV——使用多边形包围轮廓
- [opencv]计算多边形逼近曲线的长度
//利用曲线逼近,计算逼近曲线的长度 //首先创建一个逼近曲线 vector<Point2f> approx; approxPolyDP(contours[i], approx, 2, t ...
随机推荐
- Cabloy全栈JS框架微创新之一:不一样的“移动优先 PC适配”
前言 目前流行的前端UI组件库都支持移动设备优先的响应式布局特性.但基于Mobile和PC两个场景的不同用户体验,也往往会实现Mobile和PC两个版本. PC场景下的Web工程,如大量的后台前端管理 ...
- 06.Django基础五之django模型层(二)多表操作
一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...
- thymeleaf自定义标签方言处理
项目背景:springboot+thymeleaf thymeleaf两种方式处理自定义标签:AbstractAttributeTagProcessor 和 AbstractElementTagPro ...
- html盒模型基础
盒模型 概念:如果CSS对HTML文档元素生成了该元素在HTML文档布局中占据空间的矩形元素框(element box),称盒子 通过一系列定义盒子的 ...
- Hadoop点滴-Hadoop分布式文件系统
Hadoop自带HDFS,即 Hadoop Distributed FileSystem(不是HaDoop FileSystem 的简称) 适用范围 超大文件:最新的容量达到PB级 流式数据访问:H ...
- springboot 配置mybatis打印sql
方式 一: ###########################################################配置打印sql############################ ...
- ArchLinux安(重)装指南
说实话,我其实是不想要出这篇博客的.在我这一个月安装Arch的过程中,让我感触比较深的一点是: 没有谁比这个系统的官方更懂它. 尤其是这种比较复杂的系统,更是如此. 这几天,我经历了一次重装,系统坏了 ...
- 虚拟现实研究经典问卷Presence Questionnaire (PQ) 详细介绍
虚拟现实(VR)是一种沉浸式体验,它的作用就是将用户完全包裹在一个人为构建出的(数字)虚拟世界中,让用户在这个新环境中得到不一样的体验,或完成一些现实中不能完成的任务.所以让体验者相信“我身处此中”非 ...
- golang学习之路
目录 go语言介绍 开发环境准备 go语言基础 Go语言常用标准库 数据库相关 前端相关 web开发 go语言介绍 为什么要学习go语言 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置 ...
- 主动降噪技术(ANC)的前生今世–行业分析
一 原始玩家 1978年,创始人Amar G. Bose博士在从欧洲飞往波士顿的飞机上,发现飞机引擎的噪音扫净了他戴耳机欣赏音乐的兴致.这激发了他在BOSE公司进行一项消噪科技的研究.弹指之间,十年过 ...