30 OpenCV 点多边形测试

server/2024/9/23 14:28:48/

文章目录

  • 点多边形测试
  • pointPolygonTest
  • 示例

点多边形测试

在这里插入图片描述

pointPolygonTest

pointPolygonTest(
InputArray  contour,// 输入的轮廓
Point2f  pt, // 测试点
bool  measureDist // 是否返回距离值,如果是false,1表示在内面,0表示在边界上,-1表示在外部,true返回实际距离
)返回数据是double类型

示例

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace std;
using namespace cv;int main(int argc, char** argv) {// 创建一个空白的图像const int r = 100;Mat src = Mat::zeros(r * 4, r * 4, CV_8UC1);// 定义六边形的顶点vector<Point2f> vert(6);vert[0] = Point(3 * r / 2, static_cast<int>(1.34*r));   vert[1] = Point(1 * r, 2 * r);vert[2] = Point(3 * r / 2, static_cast<int>(2.866*r));   vert[3] = Point(5 * r / 2, static_cast<int>(2.866*r));vert[4] = Point(3 * r, 2 * r);   vert[5] = Point(5 * r / 2, static_cast<int>(1.34*r));// 在图像上绘制六边形for (int i = 0; i < 6; i++) {line(src, vert[i], vert[(i + 1) % 6], Scalar(255), 3, 8, 0);}// 查找轮廓vector<vector<Point>> contours;vector<Vec4i> hierachy;Mat csrc;src.copyTo(csrc);findContours(csrc, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));// 计算每个像素点到轮廓的距离Mat raw_dist = Mat::zeros(csrc.size(), CV_32FC1);for (int row = 0; row < raw_dist.rows; row++) {for (int col = 0; col < raw_dist.cols; col++) {// 计算当前像素到轮廓的距离double dist = pointPolygonTest(contours[0], Point2f(static_cast<float>(col), static_cast<float>(row)), true);// 将距离值转换为float类型并存储到raw_dist图像中raw_dist.at<float>(row, col) = static_cast<float>(dist);}}// 将距离映射到颜色,并创建一个新的图像double minValue, maxValue;minMaxLoc(raw_dist, &minValue, &maxValue, 0, 0, Mat());Mat drawImg = Mat::zeros(src.size(), CV_8UC3);for (int row = 0; row < drawImg.rows; row++) {for (int col = 0; col < drawImg.cols; col++) {float dist = raw_dist.at<float>(row, col);if (dist > 0) {// 正距离映射到蓝色通道drawImg.at<Vec3b>(row, col)[0] = (uchar)(abs(1.0 - (dist / maxValue)) * 255);}else if (dist < 0) {// 负距离映射到红色通道drawImg.at<Vec3b>(row, col)[2] = (uchar)(abs(1.0 - (dist / minValue)) * 255);} else {// 距离为0的像素点设为白色drawImg.at<Vec3b>(row, col)[0] = (uchar)(abs(255 - dist));drawImg.at<Vec3b>(row, col)[1] = (uchar)(abs(255 - dist));drawImg.at<Vec3b>(row, col)[2] = (uchar)(abs(255 - dist));}}}// 创建窗口并显示图像const char* output_win = "point polygon test demo";char input_win[] = "input image";namedWindow(input_win, CV_WINDOW_AUTOSIZE);namedWindow(output_win, CV_WINDOW_AUTOSIZE);imshow(input_win, src);imshow(output_win, drawImg);waitKey(0);return 0;
}

在这里插入图片描述


http://www.ppmy.cn/server/27479.html

相关文章

探索Headless组件与Tailwind CSS的魔力——前端开发的新选择

探索Headless组件与Tailwind CSS的魔力——前端开发的新选择 引言 前端技术日新月异&#xff0c;新的框架和工具层出不穷。今天&#xff0c;我将与大家深入探讨两个在前端开发中备受瞩目的技术&#xff1a;Headless组件和Tailwind CSS。它们各自在前端领域有着独特的价值和影…

报错“Install Js dependencies failed”【鸿蒙开发Bug已解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结Bug解决方案寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了【报错“Install Js dependencies failed”】的问题。 报错如下 问题描述 …

java-spring-mvc(服务端接收客户端传参)

目录 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 ✨ 声明参数接收 ✨声明pojo类来接收 &#x1f52a;小试牛刀 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 HttpServletRequest是Java Servlet规范中定义的一个接口&#xff0c;它提供了与HTTP请求…

Pytorch基础:torch.load_state_dict()方法在加载时不会检查类型

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 笔者在使用torch.nn.module的load_state_dict中出现了一个问题&#xff0c;一个被注册的张量在加载后居然没有变化&#xff0c;一开始以为是加载出现了问题&#…

android:textColor=“?attr/colorBottomHintText“像这种颜色值怎么获取?

android:textColor"?attr/colorBottomHintText" 在Android中&#xff0c;?attr/colorBottomHintText是一种引用主题属性&#xff08;Theme Attribute&#xff09;的方式&#xff0c;用于动态获取主题中定义的颜色值。如果你想要在Java代码中使用这样的颜色值&…

OceanBase 分布式数据库【信创/国产化】- OceanBase 通过 MySql 客户端连接 OceanBase 租户

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 通过 MySql 客户端连接 OceanBase 租户前言OceanBase 数据更新架构前提条件连接操作连接示例OceanBase 分布式数据库【信创/国产化】- OceanBase 通过 MySql 客户端连接 OceanBase 租户 编辑 …

计米功能块(CODESYS 完整ST源代码)

1、S7-1200测速计米功能块 S7-1200高速计数器编码器线速度测量(独立测速FB计米FB)_s7-1200高速计数器编程实例-CSDN博客文章浏览阅读646次。线速度工程中有很多采集方法&#xff0c;这里不再细述。博途PLC的高速计数器编程应用大家可以查看下面相关应用文章&#xff1a;计米轮…

QT 使用QLsitView 实现数据的分组多级显示,子列表可动态显示/隐藏

文章目录 效果图概述部分代码总结 效果图 概述 在QT中多级显示应该是QTreeView该干的事&#xff0c;但是当我们还需要图标显示的时候&#xff0c;也就是 setViewMode(QListView::IconMode) &#xff0c;QTreeView就无法满足了。描述下核心思想&#xff1a;整体分为俩层结构&am…