opencv c++函数 imgproc模块 24 多边形测试

来源:互联网 发布:知其雄 守其雌 编辑:程序博客网 时间:2024/05/07 20:18

目的

本教程指导用户:

  • 使用OpenCV函数 pointPolygonTest

理论

代码

本教程代码如下所示. 用户也可以点击 这里下载

#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace cv;using namespace std;/** @function main */int main( int argc, char** argv ){  /// 创建一个图形     const int r = 100;  Mat src = Mat::zeros( Size( 4*r, 4*r ), CV_8UC1 );  /// 绘制一系列点创建一个轮廓:  vector<Point2f> vert(6);  vert[0] = Point( 1.5*r, 1.34*r );  vert[1] = Point( 1*r, 2*r );  vert[2] = Point( 1.5*r, 2.866*r );  vert[3] = Point( 2.5*r, 2.866*r );  vert[4] = Point( 3*r, 2*r );  vert[5] = Point( 2.5*r, 1.34*r );  /// 在src内部绘制  for( int j = 0; j < 6; j++ )     { line( src, vert[j],  vert[(j+1)%6], Scalar( 255 ), 3, 8 ); }  /// 得到轮廓  vector<vector<Point> > contours; vector<Vec4i> hierarchy;  Mat src_copy = src.clone();  findContours( src_copy, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);  /// 计算到轮廓的距离  Mat raw_dist( src.size(), CV_32FC1 );  for( int j = 0; j < src.rows; j++ )     { for( int i = 0; i < src.cols; i++ )          { raw_dist.at<float>(j,i) = pointPolygonTest( contours[0], Point2f(i,j), true ); }     }  double minVal; double maxVal;  minMaxLoc( raw_dist, &minVal, &maxVal, 0, 0, Mat() );  minVal = abs(minVal); maxVal = abs(maxVal);  /// 图形化的显示距离  Mat drawing = Mat::zeros( src.size(), CV_8UC3 );  for( int j = 0; j < src.rows; j++ )     { for( int i = 0; i < src.cols; i++ )          {            if( raw_dist.at<float>(j,i) < 0 )              { drawing.at<Vec3b>(j,i)[0] = 255 - (int) abs(raw_dist.at<float>(j,i))*255/minVal; }            else if( raw_dist.at<float>(j,i) > 0 )              { drawing.at<Vec3b>(j,i)[2] = 255 - (int) raw_dist.at<float>(j,i)*255/maxVal; }            else              { drawing.at<Vec3b>(j,i)[0] = 255; drawing.at<Vec3b>(j,i)[1] = 255; drawing.at<Vec3b>(j,i)[2] = 255; }          }     }  /// 创建窗口显示结果  char* source_window = "Source";  namedWindow( source_window, CV_WINDOW_AUTOSIZE );  imshow( source_window, src );  namedWindow( "Distance", CV_WINDOW_AUTOSIZE );  imshow( "Distance", drawing );  waitKey(0);  return(0);}

解释

结果

  1. 输出如下:

    PPT_0

    PPT_1

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胃肠型和蠕动波怎么办 胃不蠕动了怎么办偏方 喂母乳母亲奶头裂开怎么办 给宝宝吃奶被吃到奶头裂开怎么办 宝宝吃奶奶头裂开了怎么办 小孩吃奶奶头裂开了怎么办 站久坐久腰酸痛怎么办 孕39周胎儿头小怎么办 怀孕腰两侧长肉怎么办 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办