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 ...
随机推荐
- 手机端特有的meta标签有哪些?
3.1 meta 语法 定义和用法:name 属性把 content 属性连接到 name. 语法:name=author|description|keywords|generator|revised ...
- PTA A1014
A1014 Waiting in Line (30 分) 题目内容 Suppose a bank has N windows open for service. There is a yellow l ...
- Java String 对象,你真的了解了吗?
String 对象的实现 String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一 ...
- Linux遇到的问题-记录
Linux遇到的问题 2019-04-09以前: Linux&Win双系统下时间显示不正常的问题 一般安装了双系统(Linux+Windows)就很容易出现问题,Windows是直接取硬件时间 ...
- UITableView tableHeaderView 自动布局
let size = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) headerView.frame.s ...
- opencv图像处理之常见滤波器
图像平滑 Smoothing, also called blurring, is a simple and frequently used image processing operation. 平滑 ...
- JAVASE知识点总结(三)
第十六章:抽象类和接口 一.抽象方法:在方法面前加了abstract(为了解决,子类必须要覆盖此方法,在定义的时候不要方法体). 特点:1.抽象方法没有方法体. 2.抽象方法必须放在抽象类(类前面加上 ...
- JMeter 压测Server Agent无法监控资源问题,PerfMon Metrics Collector报Waiting for sample,Error loading results file - see file log, Can't accept UDP connections java.net.BindException: Address already in use 各种疑难杂症
如何安装插件此博主已经说得很详细了. https://www.cnblogs.com/saryli/p/6596647.html 但是需注意几点: 1.修改默认端口,这样可以避免掉一个问题.Serve ...
- svn报错Item is not readable svn解决方案
解决: 配置目录权限时如: [/]tangtx=rwyangcx=rwweishq=rw 结果组用户分别在根目录下可以正常show log,而在其子目录中show log都会提示 Item is no ...
- centos7 远程连接其他服务器redis
在本地远程连接 在终端输入: redis-cli -h 服务器ip地址 -p 端口 -a 密码